服务器端或客户端长轮询?

时间:2014-04-02 17:23:10

标签: javascript php long-polling

long polling的最佳做法是什么?

目前我设置的是javascript xmlhttprequest server PHP n正在运行服务器端,检查是否有新内容并返回新内容或不新的内容变量。然后,客户端将在收到返回的值之后等待server秒,然后再发出请求。

但我在网上看到很多不同的方法,如果n没有任何新内容请不要返回,而是等待{{1}}秒并再次检查新内容,直到一定次数的尝试返回新内容或没有新内容,并且客户端在收到返回值后立即发出新请求。

所以使用上面的2,哪一个是减少服务器压力或节省更多服务器资源的最佳方法?我目前的设置还是第二次设置?或者可能采用不同的方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的第一个选项根本不是长时间轮询,它只是每n秒发送一次请求。长轮询意味着您发送一个请求,该请求将保持打开状态,直到达到超时或新数据可用。

长轮询比每n秒发送一次请求更好,因为数据更接近实时,而无需每 <小于10> 秒发送请求。

通常在服务器端,您将通过使用睡眠循环来处理长轮询请求,该睡眠循环会以短暂的延迟(例如1或2秒)重复检查数据库中的新数据。因此,如果您以2秒延迟和30秒超时执行此操作,那么每个用户每30秒就会对该数据库进行15次点击。

是的,长轮询可能是资源密集型的。作为开发人员,您必须决定可以分配多少服务器资源以改善用户体验。

websockets现在是聊天系统的首选解决方案,因为它绕过了这个问题,允许服务器在发生变化时联系客户端,而不是让n个客户每隔x秒就联系服务器询问是否有什么东西改变。通常有一个&#34; Post Message&#34;当客户端添加新消息时客户端调用的命令,该命令会将新消息广播到所有连接的客户端。