websocket 会被挂起的 http 请求阻塞吗?

Posted

技术标签:

【中文标题】websocket 会被挂起的 http 请求阻塞吗?【英文标题】:Could a websocket become blocked by pending http requests? 【发布时间】:2014-05-28 19:20:21 【问题描述】:

其他帖子和本网站清楚地表明,浏览器可能有待处理的连接数是有限制的:

http://www.browserscope.org/?category=network

How many concurrent AJAX (XmlHttpRequest) requests are allowed in popular browsers?

我的问题是,这会如何影响 websockets? 6 个待处理的 http 请求会阻止来自服务器的消息吗?如果是这样,是否有可以避免这种情况的端口配置?

请原谅我对所有这些网络的无知。我非常关注 JS,我们的 websocket 使用很关键。

谢谢你, 回复

【问题讨论】:

【参考方案1】:

没有。

WebSocket 是一个持久连接,只要您不离开,它就会一直保持连接。

每个浏览器都有自己的连接限制,如果有太多正在进行的连接,可能会延迟或暂时阻塞 WebSocket 连接,但是一旦建立连接,就不会因此阻塞任何消息。

【讨论】:

【参考方案2】:

它可能会阻塞,但可能还有许多其他原因。

尝试减少请求数量。如果还是有问题,那么阻塞的原因在别处。

一旦我在 php/Symfony2 中遇到问题,当挂起的请求由于会话锁定而阻塞任何其他连接时。

【讨论】:

哇哦。感谢您的回复,尤其是对您过去问题的参考。但是我们能否澄清一下您的连接之一是网络套接字? 不,它是长轮询 ajax。尽管如此,您需要在不同条件下测试代码以找出问题的根源在哪里。并且 websocket 连接开始作为正常的 HTTP 请求。

以上是关于websocket 会被挂起的 http 请求阻塞吗?的主要内容,如果未能解决你的问题,请参考以下文章

阻塞队列

自旋锁

挂起(suspend)与线程阻塞工具类LockSupport

交换技术(swaping) 视频11

LockSupport

9Python Asyncio异步编程-事件循环详解