问题:
在开发调试websocket的时候,去浏览器模拟了ws请求,测试服务器请求量,发现只有255个成功,之后所有请求全部失败,经各种考证发现,不是服务器问题,而是浏览器最大并发请求量为256。
原因:
调试发现发起2000个请求后报错,提示并发量太大,于是翻阅nodejs 查看关于所有请求线程并发相关内容,发现http.request() 使用的默认 http.globalAgent 的选项均为各自的默认值
- keepAlive : 保持 socket 可用即使没有请求,以便它们可被将来的请求使用而无需重新建立一个 TCP
连接。默认为 false。 - keepAliveMsecs :当使用了 keepAlive 选项时,该选项指定 TCP Keep-Alive 数据包的
初始延迟。 当 keepAlive 选项为 false 或 undefined 时,该选项无效。 默认为 1000。 maxSockets
每个主机允许的最大 socket 数量。 默认为 Infinity。 - maxFreeSockets 在空闲状态下允许打开的最大 socket 数量。 仅当 keepAlive 为 true
时才有效。 默认为 256 但是并没有为koa开启keepAlive 所以不会是原始globalAgent
的问题,使用多浏览器请求,每次200个是可以的,服务端线程池也没有报错,所以判断是浏览器限制每次并发请求不能大于256个线程。