猿问

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

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

我可以找到很多关于Long Polling如何工作的信息(例如,这个这个),但没有关于如何在代码中实现它的简单示例。

我所能找到的只是依赖于Dojo JS框架的cometd,以及一个相当复杂的服务器系统。

基本上,我将如何使用Apache来处理请求,以及如何编写一个简单的脚本(例如,在PHP中),它将“长时间轮询”服务器以获取新消息?

该示例不必是可扩展的,安全的或完整的,它只需要工作!


桃花长相依
浏览 491回答 4
4回答

largeQ

Tornado专为长轮询而设计,在/ examples / chatdemo中包含一个非常小的(几百行Python)聊天应用程序,包括服务器代码和JS客户端代码。它的工作原理如下:客户端使用JS来请求更新(上一条消息的数量),服务器URLHandler接收这些更新并添加回调以响应客户端到队列。当服务器获取新消息时,onmessage事件将触发,循环回调并发送消息。客户端JS接收消息,将其添加到页面,然后请求自此新消息ID以来的更新。

动漫人物

我认为客户端看起来像是一个普通的异步AJAX请求,但是你希望它需要“很长时间”才能回来。然后服务器看起来像这样。while (!hasNewData())     usleep(50);outputNewData();因此,AJAX请求进入服务器,可能包括上次更新时间的时间戳,以便您hasNewData()知道已经获得了哪些数据。然后服务器处于休眠状态,直到新数据可用。一直以来,你的AJAX请求仍然是连接的,只是挂在那里等待数据。最后,当有新数据可用时,服务器会将其提供给您的AJAX请求并关闭连接。
随时随地看视频慕课网APP
我要回答