【问题标题】:To update client web app of notifications?要更新通知的客户端 Web 应用程序?
【发布时间】:2013-12-04 23:07:29
【问题描述】:

我可以避免从 ping 服务器的客户端应用程序中放置一个定时事件以进行事件更新吗?

我正在使用 Angularjs、Nodejs-expressjs 来构建我的网络应用程序。

我能想到的另一个选择可能是 socket.io。

我可以做类似的事情

app.post('/abc', function(req, res){
 if(event){
   res.send('event data');
 }
});

在事件发生之前,上面的 app.post 不会返回。

【问题讨论】:

    标签: rest web-applications web


    【解决方案1】:

    推送通知有多种实现方式:

    HTTP 长轮询:客户端发起请求。服务器检查它是否有任何新的通知。无论它是否有新的通知,都会发送适当的响应并关闭连接。在 X 客户端发起另一个请求之后(+ 非常容易实现 - 通知不是实时的。它们依赖于 X,因为数据检索是客户端发起的。随着 X 减少服务器上的开销增加)

    HTTP 流式传输:这与 HTTP 长轮询非常相似,但连接并未关闭。服务器发送分块响应。因此,一旦服务器收到它想要推送的新通知,它就可以简单地写入套接字。 (+ 比长轮询的延迟更低,几乎实时的行为/关闭连接和重新打开的开销减少 - 内存使用客户端不断堆积/丑陋的黑客等)

    WebSocket:基于 TCP 的协议提供真正的双向通信。服务器可以随时向客户端推送数据。 (+ ve:真正的实时 - 一些较旧的浏览器不支持它)。阅读更多关于它的信息 WebSocket.org |关于 WebSocket

    现在基于技术堆栈,有多种可用的解决方案: (A) Nodejs:用于实时应用程序的跨浏览器 WebSocket。 (为您完成繁重的工作。在不支持 websocket 的情况下优雅地退回) (B) Django:如前所述,您可以使用信号进行通知。您也可以尝试使用 django-websocket 0.3.0 来支持 websocket (C) Jetty / Netty 和 Grizzly(基于 Java):都有 websocket 支持

    来自链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2012-02-04
      • 1970-01-01
      相关资源
      最近更新 更多