即使长时间使用PHP,最近也开始了解长轮询,否则我会定期发送ajax。
据了解,定期发送ajax消耗带宽(考虑到网站有数千个用户的情况)。同样,服务器仍然忙于提供定期的ajax请求。
长轮询的优点是,只有在有变化时才会大幅减少带宽,因为ajax只会在有变化时响应,除非ajax保持打开状态。然而,服务器需要继续工作(while循环直到错误状态),直到发生一些变化。
我的问题是,在这种技术中,服务器必须承担负担。当有数以千计的用途时,它会不会像周期性的ajax那样影响?
抱歉,如果我错了。
答案 0 :(得分:3)
当您说“加载”时,让我们考虑带宽,CPU时间和其他资源。
<强>带宽强>
正如你所说,定期ajax消耗带宽。即使来自服务器的响应基本为空,每个轮询也会有一个HTTP请求 - 响应对。使用长轮询,服务器不会响应,除非它有话要说。这是节省带宽的地方。
<强> CPU 强>
如果长轮询实现在服务器端使用sleep(),则不会使用很多CPU周期。
对于PHP:
请注意,一般情况下,只要您想延迟软件,就应该使用类似sleep()的函数。不要在没有睡眠()的情况下使用紧密循环进行定时延迟。
其他强>
根据服务器的配置,每个活动用户可能会使用进程或线程。即使在它处于休眠状态时,此进程或线程也会消耗一些资源,包括任何已分配的内存。除非您谈论大量并发用户,或者您的应用程序在每个用户的服务器上使用大量内存,否则您不太可能遇到硬件限制。您可能首先遇到线程或进程数量的软配置限制。
因此,如果您的应用程序为每个活动用户保留了大量内存,则长轮询可能使用少量用户进行内存限制,而不是定期AJAX实现,该实现为每个ajax分配和释放资源击中。有了良好的设计,这应该不是问题。