0

私の node.js アプリケーションは、TCP および Socket.io 接続を使用します。TCP から関連する socket.io 接続にデータを転送します。

私が気付いたのは、WebSocket (socket.io) 経由でデータを送信する際にわずかな遅延が発生することです。最小限のペイロードではそれほど重要ではありませんが、ペイロードの数が増えると遅延が大幅になります。

これは既知の問題ですか? socket.io での 1 回の公開には約 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秒近くのタイムラグ。

このsendToSocket関数は、TCP 接続にデータがあるたびに呼び出されます。関数の時間を測定したところ、実行に 1.5 秒近くかかりました。ルームを使用せず、単純な for ループを使用してすべてのソケット接続にデータを送信する場合も同様です。

詳細: TCP からの最大メッセージ ペイロード - 50 バイト。socket.io で送信される最大メッセージ ペイロード - 256 バイトまたは文字。頻度 - 1 秒間に 3 回という高さ。いいえ: 接続数 - 最大 10。

PS: テスト中に、Socket.io 接続のない TCP で 1 つの接続だけから空白のメッセージを送信したとしても、気付きました。socket.io は、呼び出し中にアプリを 1.5 秒間保持します。SendToSocket

4

0 に答える 0