Node.js-Socket.io-使用“发布”;“最大并发连接数”;
我有一个socket.io nodejs应用程序问题(在Windows Azure中)。它工作正常,但过了一段时间,我收到一个错误,服务器回复为: HTTP/1.1 503活动WebSocket请求数已达到允许的最大并发WebSocket请求数Node.js-Socket.io-使用“发布”;“最大并发连接数”;,node.js,sockets,Node.js,Sockets,我有一个socket.io nodejs应用程序问题(在Windows Azure中)。它工作正常,但过了一段时间,我收到一个错误,服务器回复为: HTTP/1.1 503活动WebSocket请求数已达到允许的最大并发WebSocket请求数 我在WindowsAzure上执行基本计划,根据这篇文章,我可以有350个并发连接 我正在使用Windows Azure日志计算活动套接字的数量,在350个套接字连接(和断开)的确切位置,服务器会回复错误 服务器设置: var client_id =
- 我在WindowsAzure上执行基本计划,根据这篇文章,我可以有350个并发连接
- 我正在使用Windows Azure日志计算活动套接字的数量,在350个套接字连接(和断开)的确切位置,服务器会回复错误
var client_id = 0;
var connectCounter = 0;
var server = http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
console.log('server init.');
}).listen(port);
io = io.listen(server);
io.sockets.on('connection', function(socket)
{
socket.client_id = client_id;
client_id++;
connectCounter++;
console.log('A socket with client_id ' + socket.client_id + ' connected!');
console.log('Sockets counter: ' + connectCounter);
socket.on('disconnect', function() {
console.log('A socket with client_id ' + socket.client_id + ' disconnected!');
connectCounter--;
console.log('Sockets counter: ' + connectCounter);
});
});
末尾的日志示例:
A socket with client_id 349 connected!
Sockets counter: 1
A socket with client_id 350 connected!
Sockets counter: 2
A socket with client_id 349 disconnected!
Sockets counter: 1
A socket with client_id 350 disconnected!
Sockets counter: 0
因为我的套接字正在连接和断开连接,所以不应该有350个并发连接。我做错了什么?根据我的评论,问题很可能存在于
引擎.io
模块中的一个bug中,该模块是套接字.io
的一个组件。表面上,原因是engine.io
在检测ping超时时没有关闭tcp套接字
在a中,他们显然通过向位于以下路径的文件添加self.transport.close()
调用来修补该错误:
node_modules/socket.io/node_modules/engine.io/lib/socket.js
应该在节点应用程序目录中的某个位置
我在上找到了代码行。代码如下:
Socket.prototype.setPingTimeout = function () {
var self = this;
clearTimeout(self.pingTimeoutTimer);
self.pingTimeoutTimer = setTimeout(function () {
self.onClose('ping timeout');
self.transport.close(); // This is the added line
}, self.server.pingInterval + self.server.pingTimeout);
};
试试看,它可能会解决您的问题。看看这个,显然调用了
this.transport.close()
关闭TCP套接字,这些套接字应该在ping超时时被销毁:可能应该问一下,您使用的是PaaS还是IaaS?i、 例如,您是否完全控制运行nodeJS的VM?我已经对它进行了测试,我会让您知道结果。谢谢你的发现,这就是问题所在!现在,20小时后它似乎工作正常。@xinaris你不是很喜欢互联网吗?