为了账号安全,请及时绑定邮箱和手机立即绑定

如何实施基本的“长轮询”?

如何实施基本的“长轮询”?

PHP
桃花长相依 2019-05-25 15:58:15
如何实施基本的“长轮询”?我可以找到很多关于Long Polling如何工作的信息(例如,这个和这个),但没有关于如何在代码中实现它的简单示例。我所能找到的只是依赖于Dojo JS框架的cometd,以及一个相当复杂的服务器系统。基本上,我将如何使用Apache来处理请求,以及如何编写一个简单的脚本(例如,在PHP中),它将“长时间轮询”服务器以获取新消息?该示例不必是可扩展的,安全的或完整的,它只需要工作!
查看完整描述

4 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

Tornado专为长轮询而设计,在/ examples / chatdemo中包含一个非常小的(几百行Python)聊天应用程序,包括服务器代码和JS客户端代码。它的工作原理如下:

  • 客户端使用JS来请求更新(上一条消息的数量),服务器URLHandler接收这些更新并添加回调以响应客户端到队列。

  • 当服务器获取新消息时,onmessage事件将触发,循环回调并发送消息。

  • 客户端JS接收消息,将其添加到页面,然后请求自此新消息ID以来的更新。


查看完整回答
反对 回复 2019-05-25
?
动漫人物

TA贡献1815条经验 获得超10个赞

我认为客户端看起来像是一个普通的异步AJAX请求,但是你希望它需要“很长时间”才能回来。

然后服务器看起来像这样。

while (!hasNewData())
    usleep(50);outputNewData();

因此,AJAX请求进入服务器,可能包括上次更新时间的时间戳,以便您hasNewData()知道已经获得了哪些数据。然后服务器处于休眠状态,直到新数据可用。一直以来,你的AJAX请求仍然是连接的,只是挂在那里等待数据。最后,当有新数据可用时,服务器会将其提供给您的AJAX请求并关闭连接。


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 490 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信