当长时间轮询时,为什么我的其他请求需要这么长时间?

问题描述:

客户端发出2个并发请求。 (其中1个需要60秒 - 长轮询),另一个不长轮询 - 应该立即返回。当我没有进行长时间投票时,它会马上返回。但是一旦我开始对另一个线程进行长时间轮询,另一个线程就会永远执行。当长时间轮询时,为什么我的其他请求需要这么长时间?

Firebug显示请求正在等待10-50秒。在服务器上,我从php脚本开始的那一刻开始分析所有请求,直到它返回到客户端,并且它显示每个请求只需要300ms或更少。

这个问题始于我开始做长轮询(与其他XHR请求)的同一时间。我为这两个请求使用jquery。

服务器显示它处于非常轻的负载下。 CPU和内存少于2%。 8个进程在15个池中运行(即使我运行更多的ajax请求,它似乎也没有偏离8号)。我猜每个进程可以同时运行多个ajax线程。

我确保在完成执行后立即从所有进程中退出。如果在prstat -J下列出仍有7个未使用的进程,我看不到进程池是如何用完的。此外,问题也会间歇性地发生。 Firefox应该能够处理2个并发的Ajax请求。我没有得到什么问题。

+0

我想在提出编程问题时看到你的代码比看不到它要好:) – XGreen 2010-04-17 12:47:17

+0

如果你在setTimeout(longpoll,100)中运行你的长轮询会发生什么? – mVChr 2011-01-20 03:46:58

我有同样的问题与Firefox和两个jsonp请求,一个长轮询。问题是,jsonp基本上只是脚本标签,获取JavaScript和Firefox加载动态插入的脚本同步。

这就是为什么长轮询请求必须在第二个请求开始载入之前完成。

如果您的情况不是jsonp,我无法提供任何帮助。