使用 Ajax 或 Socket 的推送和拉取技术


push and pull technologies using Ajax or Socket

我有一个网站需要像Facebook一样实时向在线客户端发送通知,经过更多的谷歌搜索,我找到了很多关于推拉技术的文档。我从本文档中找到了使用 Ajax 或套接字实现它们的方法。我需要知道在我的情况下最好使用什么,以及如何使用 javascript 或 jquery 和 php 进行编码。

如果不详细了解您的情况,我就不能说您的情况的最佳用途是什么。

在大多数情况下,让客户端每隔一两秒与服务器检查一次就足够了,询问是否发生了新情况。大多数时候,我更喜欢这个套接字,因为它可以在每个 Web 服务器上运行,而无需任何配置更改,也可以在任何支持 AJAX 的浏览器中运行,甚至是旧的浏览器。

如果您的客户端很少(因为每个客户端都需要服务器上的开放套接字),并且您想要实时,则可以使用 websocket。有几种PHP实现,例如这个:http://code.google.com/p/phpwebsocket/

如果您可以确保每个登录用户只打开一个浏览器,那么您可以轻松应用这种长轮询技术。

Ajax 调用策略:

  1. 不要每 2 秒发出一次请求。
  2. 但是,只有在从上一个请求获得响应 2 秒后,请等待并发出请求。
  3. 如果请求在 12 秒内没有响应,请不要等待发送新请求。这是连接丢失的情况。

服务器响应策略:

  1. 如果立即有更新响应。 检查是否有更新依赖会话;(如果您可以从客户端发送一些提示,例如收到的最新消息,那就更好了;第二次更新检查机制将消除如上所述的单个浏览器打开的限制)

  2. 否则 sleep() 1 秒;(不要使用无限循环而是使用睡眠),然后检查是否有更新;如果有更新,请回复;如果1秒钟没有再次睡眠;重复此操作,直到总共经过 10 秒,然后回复而不更新

如果应用此策略(通常称为长轮询),您会发现处理器使用率在重负载情况下从 95% 降低到 4%。

希望这能解释。祝你好运。

只需使用 jQuery 应用长轮询技术即可。

套接字

尚未在所有地方都受支持,您还需要在服务器上打开侦听套接字才能正常工作。