4

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

4

3 回答 3

2

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

Ajax 调用策略:

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

服务器响应策略:

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

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

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

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

于 2012-04-15T12:18:24.383 回答
2

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

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

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

于 2012-04-15T11:20:32.887 回答
0

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

套接字尚不支持所有地方,您还需要在服务器上打开一个侦听套接字才能使其工作。

于 2012-04-15T11:18:43.653 回答