假设我有脚本,在服务器上执行长轮询以检查用户是否有任何新的消息。服务器端将是这样的

while counter < 5
    if something_changed
        push_changes_to_client
        break
    else
        counter++
        sleep 5

对数据库进行5次检查,如果没有变化,则每次检查5次,直到下次检查为止,最终执行时间约为25秒。

当客户端从一个页面快速移动到另一个页面时会发生什么?我认为即使客户端移动到不同的页面,服务器脚本也会继续运行,然后它会发送另一个更改请求。

这是否意味着,当很多人在网站周围快速移动时(每页上的最大执行次数少于25秒),那么服务器必须继续运行所有脚本,这些脚本正在尝试响应不具备的页面不再存在了吗?这不会导致服务器使用它的所有线程池吗?

有帮助吗?

解决方案

在具有同步睡眠调用的每线程连接模型中,这确实可能占用大量线程。但是,如果“睡眠”,只需调度回调并返回,就可以避免线程池logjam。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top