连接到Flash Socket时,Ajax调用排队

时间:2011-09-19 15:38:18

标签: php javascript ajax flash sockets

我在运行Flash套接字并使用Ajax加载页面时遇到了问题。两者都分开工作。我可以使用Ajax调用浏览我的站点,或者我可以通过套接字发送/接收消息。

但是,当套接字由于某种原因连接时,Ajax调用似乎开始被放入队列中,直到我停止套接字才真正完成。如果我从套接字断开连接,或关闭服务器端的套接字,那么Ajax调用会立即完成并加载页面。 Ajax调用永远不会超时,它只是永远等待,直到我关闭套接字连接。

在JavaScript中,我使用jQuery的$.getJSON()函数来加载页面(我认为是异步调用)。

在Flash中,我使用的是基本的ActionScript 3 Socket类:

this._socket = new Socket();
this._socket.addEventListener(Event.CONNECT, onConnectHandler);
this._socket.addEventListener(Event.CLOSE, onCloseHandler);
this._socket.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
this._socket.addEventListener(ProgressEvent.SOCKET_DATA, onDataHandler);
this._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler);

修改

我已经确认正在进行 没有 HTTP请求。事实上,由于某种原因,它被浏览器排队。我还注意到它不仅会对Ajax请求进行排队,而且还会对浏览器刷新进行排队。如果我按下刷新按钮,它也会永久挂起。

编辑2:

实际上,当我应该检查端口443时,我正在检查端口80.实际上有一个请求发送到服务器,它只是因为某些原因而挂起。这让我相信套接字(使用PHP)存在问题以某种方式使PHP处理器对请求进行排队,或者Apache可能会对请求进行排队,因为它看到套接字正在使用PHP。我仍然不确定为什么在关闭套接字之前没有满足对PHP处理器的额外请求,但我很确定它与PHP套接字处于始终打开状态的事实有关阻止其他请求。

1 个答案:

答案 0 :(得分:0)

显然问题是由于浏览器实现的2限制连接。由于套接字使用其中一个与主机的持久连接,因此其余的HTTP请求都会出现瓶颈。

问题和解决方案描述为here

  

...如果浏览器要限制数量   连接到一个主机,答案只是欺骗   浏览器认为这是与多个主机交谈。结果   这样做相当简单:只需添加多个CNAME即可   主机到DNS,然后引用那些作为主机的一些   页面中的对象。

相关问题