2

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

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

它检查数据库5次,每次如果没有变化,它会等待5s直到下一次检查,这导致最大执行时间约为25s。

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

这是否意味着,当很多人在网站上快速移动时(每个页面上的最长执行时间少于 25 秒),那么服务器必须继续运行所有脚本,这些脚本试图响应不存在的页面还有吗?这不会导致服务器非常快地使用它的所有线程池吗?

4

1 回答 1

4

在具有同步睡眠调用的每连接线程模型中,这确实可能占用大量线程。但是,如果“睡眠”只是简单地安排一个回调并返回,则可以避免线程池 logjam。

于 2009-09-14T19:09:23.507 回答