如何在没有频繁的ajax请求的情况下从客户端获取更新?

Sac*_*hin 8 ajax jquery client client-server server

在我的项目中,有私人聊天和消息通知等功能.消息通知让我们知道是否有任何新的未读消息.


为实现这一目标,我想到的想法是

就像在client- server模型中一样,服务器应该监听新请求.就像那样,我认为应该有一些机制来监听服务器以获取有关新消息的信息.因为我知道ajax,所以我使用的ajax请求间隔为2秒.

在chrome中检查它时,ajax请求如下所示. 在chrome的网络部分下的Ajax请求

但我后来认为,如果这是唯一的想法,StackOverflow应该使用相同的技巧,因为它们异步更新通知/投票信息.

在chrome中检查他们的ajax请求,它完全是空白的.

我需要知道如何在不使用频繁的ajax请求的情况下实现它(这将增加服务器上的负载).
使用最有效技术的简单示例对于学习非常有用.

Ama*_*dan 8

这被称为Comet,有几种方法可以实现它:

  • 轮询(您正在做什么 - 如果有消息,请定期检查)
  • 长轮询(在有消息之前发出请求但没有得到响应)
  • 流式传输(打开以递增方式发送可执行JavaScript更新的脚本连接)
  • Websockets(最好的选择,如果支持的话 - 其余的都是针对Websockets最终要解决的问题)

实现它们是棘手的,这里有许多库可供选择,为您正确实现它们(例如Socket.IO).

编辑:

使用最有效技术的简单示例对于学习非常有用.

正如我所说,你不想自己实施,因为它们很棘手,充满危险; 最好的Comet库考虑了浏览器的功能并选择了最佳协议,因此它对程序员来说是透明的,这使得使用这个模型很容易开发.例如,查看Socket.IO教程.

另请注意,您需要一台能够处理Comet的服务器:例如Socket.IO可与Node.JS配合使用.例如,它们不能与默认的Apache一起使用.

  • @Lucky:不太合适.如果客户端没有先联系服务器,服务器就无法从客户端发起请求. (2认同)