concurrency - 浏览器中的最大并发连接数到底意味着什么?

标签 concurrency browser connection-pooling long-polling tcp

假设我有一个已注册的聊天应用程序,它对 Apache 服务器进行长轮询。我读过一些书,但我仍然很困惑,想非常确定。据我了解,它可以是:

  1. 任何数量的客户端都可以对该服务器进行长轮询,并且不会影响限制,因为所有客户端每个都只有 1 个并发连接到服务器。因此,如果我在同一台计算机或不同计算机的 7 IE8/chrome/firefox 中打开聊天应用程序并连接到相同的 url/域,它不会受到影响,但如果我在 IE8/中的 7 个选项卡中打开聊天只有 chrome/firefox 才会受到影响。
  2. 与上述相同,但只有当我通过 7 个不同的帐户在 7 台计算机上打开 7 个 IE8/chrome/firefox 浏览器时,限制才会受到影响。这意味着只有 6 个不同的用户可以同时连接到聊天应用程序。

我非常倾向于第一个。你能帮我更正/扩展两者中的任何一个,或者如果两者都错了,请添加数字 3?谢谢!

最佳答案

此限制是每个浏览器供应商设置的限制。浏览器实例的典型连接限制设置为到同一域的 6 个套接字连接。这六个连接组成了浏览器套接字池。该套接字池由套接字池管理器管理,并在所有浏览器进程中使用。这是为了通过重用已建立的连接以及其他性能优势来最大限度地提高 TCP 连接的效率。

根据HTTP 1.1 specification最大连接数应限制为 2。

Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. These guidelines are intended to improve HTTP response times and avoid congestion.

但是,此规范于 1999 年 6 月在互联网刚刚起步时获得批准,Chrome 等浏览器供应商自 increased this number to six.

Currently these are set to 32 sockets per proxy, 6 sockets per destination host, and 256 sockets per process (not implemented exactly correct, but good enough).

话虽如此,每个套接字池都由每个浏览器管理。取决于浏览器的连接限制(最少两个)。你应该能够通过在 IE、Chrome、Firefox 和 Safari 中打开两个选项卡来打开 8 个连接。您的最大连接数受浏览器本身的限制。还要记住服务器一次只能处理这么多并发连接。不要不小心 DoS 自己 :)

如果您绝对需要超越连接限制,您可以查看域分片。这基本上通过为请求提供不同的主机名来欺骗浏览器打开更多新连接。不过我不建议使用它,因为浏览器设置了这些限制以最大化性能并重用现有连接。小心行事。

关于concurrency - 浏览器中的最大并发连接数到底意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398714/

相关文章:

go - 如何在单个程序中使用多个 sync.WaitGroup

java - 什么是 ReentrantReadWriteLock 的升级/降级?

javascript - 标题更改效果/窗口事件监听器不起作用

sql-server - sql server 连接必须空闲多长时间才能被连接池关闭?

mysql - 通过单例的 node.js mySQL 连接

Java并发: How to select and configure Executors

java - 绑定(bind)到事件流的线程池,用于按顺序推送异步事件

html - 调整浏览器大小时阻止网页上的元素移动

javascript - NodeJS && 浏览器跨兼容 websocket 客户端

java - BoneCP SLF4J ClassNotFoundException