我有一个socket.io服务器和一个正常运行的客户端。每次服务器关闭时,客户端都会尝试每5秒重新连接一次。当服务器再次启动时,它们会毫无问题地进行连接。
但当我再次启动服务器之前等待了很长时间时,问题来了,当服务器启动时,它崩溃了,显示:
info - socket.io started
debug - client authorized
info - handshake authorized DqN4t2YVP7NiqQi8zer9
debug - setting request GET /socket.io/1/websocket/DqN4t2YVP7NiqQi8zer9
debug - set heartbeat interval for client DqN4t2YVP7NiqQi8zer9
debug - client authorized for
debug - websocket writing 1::
buffer.js:287
pool = new SlowBuffer(Buffer.poolSize);
^
RangeError: Maximum call stack size exceeded客户端重新连接(未连接时每隔5秒执行一次):
function socket_connect() {
if (!socket) {
socket = io.connect('http://192.168.1.25:8088', { 'reconnect':false, 'connect timeout': 5000 });
} else {
socket.socket.connect();
}
socket.on("connect", function () {
clearInterval(connect_interval);
connect_interval = 0;
socket.emit('player', { refresh_data:true });
});
}在服务器端,只有套接字实例才会崩溃:
var io = require('socket.io').listen(8088);我认为问题在于:
当服务器启动时,它每隔5秒接收一次客户端发出的所有连接(15小时断开* 60 m* 60 s/5秒重新连接),然后崩溃。
要关闭服务器尝试执行的连接,我可以执行哪些操作?
PS:如果我重新加载客户端,并在服务器启动后,它可以工作
发布于 2013-02-08 21:18:38
我发现了这个问题...
每次调用函数socket_connect()时,都会出现一个"socket.on("connect“...”函数已创建。因此,当服务器启动时,会创建一个新的连接,但是事件"socket.on("connect“)会被多次触发...
解决方案是:
function socket_connect() {
if (!socket) {
socket = io.connect('http://192.168.1.25:8088', { 'reconnect':false, 'connect timeout': 5000 });
} else {
socket.socket.connect();
}
}
socket.on("connect", function () {
clearInterval(connect_interval);
connect_interval = 0;
socket.emit('player', { refresh_data:true });
});发布于 2013-02-07 17:31:28
socket.io.js的主要思想是重用现有的连接。您应该只连接它一次,然后使用socket.emit()交换消息。
我不确定为什么您每隔5秒就在客户端和服务器之间创建一个新连接。服务器可以创建的连接数量是有限制的,但这应该足够了。如果你把它放在一个循环中,那么最终服务器会用完所有的套接字。
io.connect必须在客户端执行一次,然后您可以每隔5秒执行一次socket.emit()。删除{ 'reconnect':false,'connect timeout':5000 }就可以了。
https://stackoverflow.com/questions/14747483
复制相似问题