一个页面打开的网络套接字的数量是否有限制(实用或其他)



我们非常喜欢带有web套接字的异步模型。在我们的一些应用程序中,我们在框架中实现小部件(通常一个页面上有10或20个小部件)。每个小部件打开一个web套接字以接收状态更改的通知。

对于一个页面可以打开的网络套接字的数量,是否有任何最佳实践、实际限制或硬性限制?

这取决于浏览器。

参见:

  • 每个主机的HTTP同时连接限制。。。是按选项卡、浏览器实例还是全局
  • HTML5网络套接字:打开连接的最大数量

可能打开的Websocket的最大数量似乎是由浏览器实现定义的,很难找到数字。

在Chromium源代码(适用于Linux的Google Chrome)中,我可以看到每个主机最多30个,总共256个。

// Limit of sockets of each socket pool.
int g_max_sockets_per_pool[] = {
  256,  // NORMAL_SOCKET_POOL
  256   // WEBSOCKET_SOCKET_POOL
};
// Default to allow up to 6 connections per host. Experiment and tuning may
// try other values (greater than 0).  Too large may cause many problems, such
// as home routers blocking the connections!?!?  See http://crbug.com/12066.
//
// WebSocket connections are long-lived, and should be treated differently
// than normal other connections. 6 connections per group sounded too small
// for such use, thus we use a larger limit which was determined somewhat
// arbitrarily.
// TODO(yutak): Look at the usage and determine the right value after
// WebSocket protocol stack starts to work.
int g_max_sockets_per_group[] = {
  6,  // NORMAL_SOCKET_POOL
  30  // WEBSOCKET_SOCKET_POOL
};

在Firefox配置中,(转到about:config并搜索network.websocket)我可以看到每个主机最多有6个持久连接,总共有200个,但显然持久连接限制不会影响WebSocket连接,所以只有200个限制适用。

关于方法

我的建议是,你应该使用一个每页/选项卡。如果您有小部件作为框架,请使用.postMessage(+info)在框架和主页之间进行通信,并让主页通过单个连接与服务器进行通信。使用发布者/订阅者模型允许不同的小部件订阅特定的事件。

拥有如此多的连接是对浏览器和服务器资源的浪费。

相关内容

  • 没有找到相关文章

最新更新