私の 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