我是一名web程序员,在常规同步和异步web服务方面经验丰富。因此,从web服务器获取数据的通常方法是请求(拉取)或建立永久连接。
现在我问自己是否有可能反过来运行,这样服务器就可以使用本地技术(如HTML5和Javascript)将新数据推送到客户机,而无需客户机先前的请求。
总结:我正在寻找一种方法来实现一个服务器端推送系统,它可以与任何现代的网络浏览器(即,FF,Chrome,Safari,…)一起工作,使用常规技术,如HTML5和Javascript,而不需要任何插件或附加软件。
只要打开网站,客户机就应该监听新数据,只有在推送新数据时才应该与服务器建立连接。它甚至必须通过NAT或防火墙才能工作。
很好的主要原因是节省服务器负载和多个连接客户端的数据传输。请注意,并非每次推送都是广播,单客户端推送也必须可用。
如果没有额外的软件,这是可能的还是仍然没有办法处理?
谢谢你

最佳答案

虽然它还没有在所有浏览器中实现,但是您可以尝试使用标准的Web Push API
您可以在Using the Push API&Push Notifications on the Open Web文章中阅读更多内容。
Push API是W3C标准,允许Web应用的用户在任何时候获得推送通知,即使是在后台;也就是说,即使Web应用未在用户设备的前台运行(甚至浏览器当前未在用户设备上运行)。
它使用Service Workers来处理使用公共推送服务发送的消息,并允许您的Web应用对其接收到的推送通知做出响应。
它向脚本公开一个新的push事件。下面是Push Notifications on the Open Web文章中的一个简单代码示例,演示如何使用push事件来显示实际的通知。

self.addEventListener('push', function(event) {
  console.log('Received a push message', event);

  var title = 'Yay a message.';
  var body = 'We have received a push message.';
  var icon = '/images/icon-192x192.png';
  var tag = 'simple-push-demo-notification-tag';

  event.waitUntil(
    self.registration.showNotification(title, {
      body: body,
      icon: icon,
      tag: tag
    })
  );
});

更新2016-02-12
微软Edge团队最近将the status of Web Push support in Edge移到了路线图优先级:高-我们打算很快开始开发。因为Chrome和Firefox已经提供了对它的支持,这意味着
一旦Edge获得支持,您就可以向Web应用程序的Edge、Chrome和Firefox用户发送标准推送通知。

10-04 12:14
查看更多