没有 node.JS 的推送系统

Posted

技术标签:

【中文标题】没有 node.JS 的推送系统【英文标题】:Push System without node.JS 【发布时间】:2012-03-28 07:19:48 【问题描述】:

我想创建一个类似于 facebook 的通知系统(当有人对您的帖子发表评论时出现在屏幕左下方的通知系统,例如)。

这里的事情是,当有人在这个时刻进入站点时,服务器需要向您发送通知。我认为这被称为 PUSH 系统(抱歉我的英语不好)。

我尝试使用 node.JS,但我的专用服务器无法安装它。除非我购买了非常昂贵的 VPS 计划。

那么,有没有办法使用 jQuery 或类似的东西来制作这个推送通知系统?

谢谢!!

,罗德里戈。-

【问题讨论】:

查看这些相关的 SO 问题:***.com/questions/7594425/ajax-push-system 和 ***.com/questions/9138309/… 谢谢!我会看这个 【参考方案1】:

如果您想要一个低延迟、高效的解决方案,您应该使用 WebSockets。但是,如果浏览器不支持 WebSocket,您需要准备好后备方案,例如可用的长轮询/短轮询。

WebSocket 协议在服务器和客户端之间提供全双工(双向)连接。传统的 HTTP 是半双工的(一种方式)。此链接将概述使用 WebSockets 与 HTTP 的好处:http://www.websocket.org/quantum.html

您需要注意,大多数现代浏览器都支持 WebSocket,但使用不同的协议。见这里:What browsers support HTML5 WebSocket API?。

【讨论】:

【参考方案2】:

除了我在上面的 cmets 中发布的参考资料之外,实施长轮询技术是消除大量正常轮询的常见解决方案。以下是Wikipedia 所说的:

长轮询是传统轮询技术的一种变体,允许模拟从服务器到客户端的信息推送。使用长轮询,客户端以与正常轮询类似的方式从服务器请求信息。但是,如果服务器没有任何可用于客户端的信息,则服务器不会发送空响应,而是保留请求并等待某些信息可用。一旦信息可用(或在适当的超时后),就会向客户端发送完整的响应。客户端通常会立即从服务器重新请求信息,因此服务器几乎总是有一个可用的等待请求,它可以用来传递数据以响应事件。在 web/AJAX 上下文中,长轮询也称为 Comet 编程。

【讨论】:

谢谢,我不了解 Comet 的工作原理,但我会尽快研究它。在 setTimeOut 函数中使用 jQuery AJAX API 发出请求很糟糕,对吧? 使用 javascriptsetTimeout() 还不错,因为它只运行一次并超时。另一方面,使用setInterval() 将允许您以设定的时间增量重复进行AJAX 调用。这种“轮询”可能会使您的服务器和应用程序陷入困境。这就是“长轮询”的用武之地。您使用 Javascript/jQuery 发出单个请求,服务器保持该连接,直到它有数据,对于应用程序的用户来说,看起来好像服务器只是将数据“推送”到应用程序实际上所做的只是延迟返回数据。

以上是关于没有 node.JS 的推送系统的主要内容,如果未能解决你的问题,请参考以下文章

通过 JSON RPC 与 SignalR/Node.JS 推送消息

Node.js 不推送所有通知

node.js 和推送通知

Node.js 网络推送库

在禁用客户端推送的情况下,有啥方法可以在 Node.js 上使用 Parse 发送推送?

使用 Node.js 创建 Safari 推送通知签名