首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node socket.io服务器在启动时崩溃

问Node socket.io服务器在启动时崩溃
EN

Stack Overflow用户
提问于 2013-02-07 17:18:01
回答 2查看 1.9K关注 0票数 0

我有一个socket.io服务器和一个正常运行的客户端。每次服务器关闭时,客户端都会尝试每5秒重新连接一次。当服务器再次启动时,它们会毫无问题地进行连接。

但当我再次启动服务器之前等待了很长时间时,问题来了,当服务器启动时,它崩溃了,显示:

代码语言:javascript
复制
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秒执行一次):

代码语言:javascript
复制
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 });
    });
}

在服务器端,只有套接字实例才会崩溃:

代码语言:javascript
复制
var io = require('socket.io').listen(8088);

我认为问题在于:

当服务器启动时,它每隔5秒接收一次客户端发出的所有连接(15小时断开* 60 m* 60 s/5秒重新连接),然后崩溃。

要关闭服务器尝试执行的连接,我可以执行哪些操作?

PS:如果我重新加载客户端,并在服务器启动后,它可以工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-08 21:18:38

我发现了这个问题...

每次调用函数socket_connect()时,都会出现一个"socket.on("connect“...”函数已创建。因此,当服务器启动时,会创建一个新的连接,但是事件"socket.on("connect“)会被多次触发...

解决方案是:

代码语言:javascript
复制
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 });
    });
票数 0
EN

Stack Overflow用户

发布于 2013-02-07 17:31:28

socket.io.js的主要思想是重用现有的连接。您应该只连接它一次,然后使用socket.emit()交换消息。

我不确定为什么您每隔5秒就在客户端和服务器之间创建一个新连接。服务器可以创建的连接数量是有限制的,但这应该足够了。如果你把它放在一个循环中,那么最终服务器会用完所有的套接字。

io.connect必须在客户端执行一次,然后您可以每隔5秒执行一次socket.emit()。删除{ 'reconnect':false,'connect timeout':5000 }就可以了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14747483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档