2

我正在尝试对 facebook 如何处理他们的通知进行逆向工程,当您收到消息时,您会立即通过浏览器收到通知。

我已经摆弄了一点,并意识到如果您愿意从服务器进行某种更新,总会有一个挂起的 GET 请求“监听”。这似乎是某种观察者模式。我只是想知道这种模式是否记录在某处。

4

2 回答 2

2

该技术实际上称为Long Polling。这是克服传统轮询限制的流行Comet技术之一。

您可能想查看以下 Stack Overflow 帖子以获得一个非常简单的示例:


更新:

除了上述内容之外,我建议您查看以下 Stack Overflow 帖子的已接受答案,以获取该技术的详细说明:

于 2010-04-21T04:51:26.053 回答
0

该技术称为彗星,又名“服务器推送”

目前有两种实现彗星的主要方式。

1)正如丹尼尔提到的,长轮询,您可以使用ajax向浏览器留下一个挂起的请求,直到服务器决定(无论是基于其他人的操作还是另一个服务器事件)才会发回响应.

2) Google 使用的第二种方法是流式传输。这涉及使用 ajax 留下一个挂起的请求,但响应永远不会发回给你。取而代之的是,服务器更新数据位,您使用 javascript 来监视更改,并根据被推送的新数据触发事件。发生的情况是,您会在一个永不关闭的文档上获得一个非常长的连续数据流,采用新的进来的数据。

HTML5 有一个使用 Web-Sockets 的更简单方法的规范。将来,由于 Web-Sockets 易于使用,这种类型的实时网络应用程序将变得司空见惯,但并非所有浏览器都支持它。

如果您想为生产构建 Comet 站点,则需要使用非阻塞 I/O 异步服务器,如下所示。

http://www.tornadoweb.org/ - 蟒蛇

http://nodejs.org/ - 服务器端 javascript

- 或谷歌彗星服务器。

您需要知道如何在服务器端为 Comet 类型的应用程序编程,因为 Comet 的 javascript 非常简单,只是带有几个事件处理程序的普通 ajax 调用。

于 2010-04-21T10:10:45.273 回答