我一直在学习长轮询,在读了一点之后,我发现自己有点困惑。我查看了here和here的解释
我不太明白在响应之前让服务器休眠有什么意义。我知道这个想法是为了保持客户端和服务器之间的连接是开放的,但是在第二个链接和最高支持率的php示例中,它有一个代码片段,其中服务器只是在一段时间内调用睡眠。
<?php
/* Send a string after a random number of seconds (2-10) */
sleep(rand(2,10));
echo("Hi! Have a random number: " . rand(1,10));
?>睡眠到底完成了什么?这不就是让它在每次你发送一个请求时,它只会先休眠(让服务器什么都不做),然后响应,使它完全像一个标准的http请求,但速度要慢得多?如果休眠只是让服务器在一段时间内什么都不做,我看不出维护连接有什么帮助。每次收到新信息时,长轮询的意义不是都要响应客户端吗?
发布于 2015-09-11 07:41:12
长轮询是指服务器在新数据准备好返回给客户端之前不响应(在固定的时间段内不休眠)。
假设您需要从服务获取一条新信息。您的(轮询)选项是:定期轮询客户端以固定的时间间隔发送请求并请求最新信息。这很容易实现(并且可能对并发连接的数量也很容易),但这意味着1)您需要为您的用例调优间隔(准备好数据后多久需要数据),2)您需要等待数据的最大值(RTT +延迟间隔),3)会发生大量的握手
Long polling客户端发送请求并等待单个响应。服务器线程将休眠,并在数据可用时得到通知,此时它将返回这些数据作为响应的一部分。这意味着客户端在数据可用后将拥有RTT /2时间格式的数据。但是服务器需要保持更多的并发连接打开。
https://stackoverflow.com/questions/32513170
复制相似问题