Node.js Socket.io来自一个客户端的多个连接
我有一个节点JS+Socket.io设置来处理聊天+投票网站。从第一天起,我就注意到,一个客户不时会建立多个连接 客户端的浏览器(用户代理)和网络(ip)每次都不同,一次大约有2-3k的连接。这种行为很难诊断/重现,因为它每两天发生一次 据我观察,这就像客户端的浏览器连接并立即断开连接(超时),所以它尝试重新连接。Socket.io不知道用户“超时”,因此Node.js Socket.io来自一个客户端的多个连接,node.js,socket.io,Node.js,Socket.io,我有一个节点JS+Socket.io设置来处理聊天+投票网站。从第一天起,我就注意到,一个客户不时会建立多个连接 客户端的浏览器(用户代理)和网络(ip)每次都不同,一次大约有2-3k的连接。这种行为很难诊断/重现,因为它每两天发生一次 据我观察,这就像客户端的浏览器连接并立即断开连接(超时),所以它尝试重新连接。Socket.io不知道用户“超时”,因此io.engine.clientscont显示几分钟内连接数增加。这不会是一个问题,对性能没有太大影响,但它在统计数据中显示错误数据,这对我来
io.engine.clientscont
显示几分钟内连接数增加。这不会是一个问题,对性能没有太大影响,但它在统计数据中显示错误数据,这对我来说是不可接受的
如下面的屏幕截图所示,此行为会导致连接计数器出现“尖峰”:
我找不到关于这种行为的任何信息,但我没有什么想法:
HTTP headers:
host: ***.***.**.**:3000
connection: keep-alive
referer: http://***************.pl/
origin: http://***************.pl
x-wap-profile: http://wap.samsungmobile.com/uaprof/GT-P7510.xml
accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
accept-charset: utf-8, iso-8859-1, utf-16, *;q=0.7
user-agent: Mozilla/5.0 (Linux; U; Android 3.2; pl-pl; GT-P7510 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
accept-encoding: gzip,deflate
accept-language: pl-PL, en-US
cookie: io=ejdnQT_TOXNpRc-GAJU8
Socket info:
time: Sun Feb 07 2016 17:13:05 GMT+0100 (CET)
address: ***.**.**.**
xdomain: true
secure: false
issued: 1454861585297
url: /socket.io/?EIO=3&transport=polling&t=1454865217050-32520
-----
HTTP headers:
host: ***.***.**.**:3002
connection: keep-alive
referer: http://***************.pl/
origin: http://***************.pl
accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8
accept-charset: utf-8, iso-8859-1, utf-16, *;q=0.7
user-agent: Mozilla/5.0 (Linux; U; Android 3.2; pl-pl; GT-P7300 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
accept-encoding: gzip,deflate
accept-language: pl-PL, en-US
cookie: io=lLFL2chztf7gZzh3AFtG
Socket info:
time: Sun Feb 07 2016 17:40:55 GMT+0100 (CET)
address: **.***.*.**
xdomain: true
secure: false
issued: 1454863255162
url: /socket.io/?EIO=3&transport=polling&t=1454863408365-11598
他们似乎都在使用三星的安卓3.2平板电脑。我用这个版本在Android AVD emulator上进行了测试,但没有结果。你确定这不仅仅是长轮询传输吗?我通过在客户端添加
传输:['polling']
并运行ab-n 100-c 10”进行了测试http://192.168.1.30:3000/socket.io/?EIO=3&transport=polling&t=1450545297036-0“
。这实际上会创建100个新连接,这些连接在预定义的超时(大约60秒?)后断开。然而,所描述的行为是完全不同的。连接的堆叠速度似乎略高于丢弃速度。此外,对于轮询传输,应该仍然只有一个连接(正如在浏览器中使用transports:['polling']
选项所观察到的),您曾经解决过这个问题吗?我也有类似的行为。150个客户,但2500个连接。不:(这个项目现在已经死了,我没有用任何类似的方法来解决这个问题anything@datayeah你找到答案了吗?我也有同样的答案。轮询请求只在t
queryparam(酵母时间戳缓存破坏)上有所不同。