我在运行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套接字处于始终打开状态的事实有关阻止其他请求。
答案 0 :(得分:0)
显然问题是由于浏览器实现的2限制连接。由于套接字使用其中一个与主机的持久连接,因此其余的HTTP请求都会出现瓶颈。
问题和解决方案描述为here:
...如果浏览器要限制数量 连接到一个主机,答案只是欺骗 浏览器认为这是与多个主机交谈。结果 这样做相当简单:只需添加多个CNAME即可 主机到DNS,然后引用那些作为主机的一些 页面中的对象。