Socket.IO服务器的奇怪行为

时间:2019-09-11 07:55:43

标签: javascript node.js socket.io

工作几个小时后,我的Socket.IO客户端开始向服务器发出无休止的请求...

所以。有在线人数统计服务器:

const http = require('http');
const io = require('socket.io');

const app = http.createServer();
const socket_io = io.listen(app);

app.listen(2053); 

let clients = [];
    socket_io.sockets.on('connection', (socket) => {
      let ip = socket.handshake.headers['x-real-ip'];
      if (ip && !clients.hasOwnProperty(ip)) {
        clients[ip] = 1;
      }

      socket.on('disconnect', () => {
        if (ip && clients.hasOwnProperty(ip)) {
          delete clients[ip];
        }
      });
    });

    let tick = () => {
      let _online = Object.keys(clients).length;
      socket_io.sockets.emit('changeOnlineEvent', { 'online': _online });
      setTimeout(tick, 2000);
    };
    setTimeout(tick, 2000);

,每2秒向客户端发送一次统计信息。看起来很简单。

这是客户:

let socket = io.connect('http://domain:port',
{
  'reconnection': true,
  'reconnectionAttempts': 2
});
socket.on('changeOnlineEvent', (object) => {
 console.log(object.online);
});

但是在每个客户端工作了几个小时(6-12小时)后,便开始向io.server发出无休止的请求: requests screenshot 如您所见,每个响应为200 OK,并具有正确的响应正文。

这时,我开始在zabbix中看到一个可怕的图像: zabbix

在浏览器中重新加载页面无济于事。在运行io服务器应用程序时,服务器控制台中没有任何错误。一切都很好。

在这种情况下唯一有用的方法-重新启动nodejs应用程序:-(

我不知道怎么了以及如何调试它。需要帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

  1. 您可以尝试仅使用网络套接字传输。参见https://socket.io/docs/client-api/#With-websocket-transport-only (无休止的请求,因为在轮询模式下,客户端每隔一定的时间间隔要求服务器进行更新)
  2. 如果按以下方式运行服务器,则可以从服务器获取更多日志:DEBUG=engine:socket node index.js(socket.io使用debug软件包https://www.npmjs.com/package/debug