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

时间:2012-04-15 11:14:53

标签: php jquery ajax

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

3 个答案:

答案 0 :(得分:2)

如果不详细了解你的情况,我不能说你的情况最好用。

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

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

答案 1 :(得分:2)

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

Ajax呼叫政策:

  1. 请勿每2秒发出一次请求。
  2. 但是等待并在收到上一次请求的响应2秒后才发出请求。
  3. 如果请求在12秒内没有响应,则不要等待发送新请求。这是连接丢失的情况。
  4. 服务器响应政策:

    1. 如果有更新响应立即。检查是否有依赖会话的更新; (如果你能像收到的最新消息那样从客户端发送一些提示更好;第二次更新检查机制将消除上面提到的单一浏览器打开的限制)

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

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

      希望这可以解释。祝你好运。

答案 2 :(得分:0)

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

套接字在任何地方都不受支持,您还需要在服务器上打开一个侦听套接字才能使其正常工作。