Web 服务的服务器端数据推送

server-side data push for web services

我是一名网络程序员,在常规同步和异步网络服务方面经验丰富。所以从网络服务器获取数据的正常方法是请求(拉取)或建立永久连接。

现在我问自己是否有可能 运行 反过来,这样服务器就可以通过使用像 HTML5 和 Javascript.

总结:我正在寻找一种方法来实现服务器端推送系统,该系统适用于任何现代网络浏览器(IE、FF、Chrome、Safari 等),方法是使用常规技术,例如HTML5 和 Javascript 没有任何插件或附加软件。

只要网站打开,客户端就应该只监听新数据,如果推送新数据,则应该只与服务器建立连接。即使通过 NAT 或防火墙,它也必须工作。

主要是为了节省服务器负载和与许多连接的客户端的数据传输。另请注意,并非每次推送都是广播,单客户端推送也必须可用。

如果没有额外的软件,这是否可能或仍然无法处理?

谢谢

有WebSockets技术,它允许客户端和服务器之间连续的全双工连接流。更详细的在这里 https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications.

WebSocket是标准化协议,各服务器都支持。

虽然尚未在所有浏览器中实现,但您可以尝试使用标准 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更新

Microsoft Edge 团队最近将 the status of Web Push support in Edge 移至 路线图优先级:高 — 我们打算尽快开始开发。由于 Chrome 和 Firefox 已经提供了对它的支持,这意味着 一旦 Edge 获得支持,您将能够向 Edge、Chrome 和您的 Web 应用程序的 Firefox 用户发送标准推送通知。