0

我的 node.js 应用程序使用 TCP 和 Socket.io 连接。它将数据从 TCP 转发到相关的 socket.io 连接。

我注意到的是,在通过 WebSockets (socket.io) 发送数据时有一个小的延迟,在最小的有效负载期间并不那么重要,但随着有效负载数量的增加,延迟变得很重要。

这是一个已知的问题?socket.io 上的单个发布大约需要 1.5 秒。

这是我的代码。

var net = require('net');

var httpServer = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080);
console.log('Server running at http://127.0.0.1:1337/');

// The Socket.io jibber-jabber
var io = require('socket.io').listen(httpServer);
io.sockets.on('connection', function (socket) {
  socket.emit('con',"Connected!");
  socket.on('subscribe', function(data) { socket.join(data.room); });
  socket.on('unsubscribe', function(data) { socket.leave(data.room); });
  webSockets.push(socket);
  console.log("Websocket connected.");
  
  socket.on('disconnect', function () {
    var index = webSockets.indexOf(socket);
  webSockets = webSockets.splice(index,1);
  console.log("Websocket disconnected.");
  });
});

function SendToSocket(room, mssg)
{
    console.log("--- Sending too rooms ---");
    var time1 = new Date();
    io.sockets.in(room).emit(room, mssg);
    var time2 = new Date();
    console.log(time1.getSeconds(),time1.getMilliseconds(),"---",time2.getSeconds(),time2.getMilliseconds());
}

var shortServer = net.createServer(function(c) { //'connection' listener
console.log('TCP client connected');
  c.on('end', function() {
console.log('TCP client disconnected');
c.destroy();
  });

  c.on('data', function(data){
console.log(data);
            SendToSocket('domain',data);
  });
});


shortServer.listen(2501, function() { //'listening' listener
  console.log('TCP Server bound');
});

输出如下

   info  - socket.io started
TCP Server bound
TCP client connected
<Buffer ff fb 1f ff fb 20 ff fb 18 ff fb 27 ff fd 01 ff fb 03 ff fd 03>
--- Sending too rooms ---
42 564 '---' 44 245

42 567 分别表示 socket.io 操作之前的秒和微秒,而 44 245 表示操作之后的时间。延迟接近 2 秒。

只要任何 TCP 连接上有数据,就会调用该sendToSocket函数。我已经对这个功能进行了计时,它需要接近 1.5 秒才能完成。如果我不使用房间也是一样的,并使用一个简单的 for 循环将数据发送到所有套接字连接。

更多详细信息:来自 TCP 的最大消息有效负载 - 50 字节。在 socket.io 上发送的最大消息负载 - 256 字节或字符。频率 - 高达每秒 3 次。数量:连接数 - 最多 10 个。

PS:在测试过程中,我注意到,即使我只从一个没有 Socket.io 连接的 TCP 连接发送了一条空白消息;socket.io 在调用期间持有应用程序 1.5 秒SendToSocket

4

0 回答 0