Web ゲームに socket.io を使い始めました。
nodejs Expressサーバーを使って簡単なテストを書いてみました。このテストでは、サーバーがタイムスタンプをクライアントに書き込み、クライアントがこのタイムスタンプを返します。この後、サーバーは送受信に使用された時間をログに記録します。
結果: ping 500 ミリ秒 +- 10 ミリ秒。そして、ローカルネットワーク内の別のコンピューターで実行しようとしたときも同じ結果でした。
ですから、TCP Nagle アルゴリズムまたは類似のアルゴリズムが原因で、遅延が非常に大きくなっていると思います。nodejsサーバーにデータを待たずに表示されるようにフラッシュするように指示する方法を知っている人はいますか?
サーバーコード:
var express = require('express'), socketio = require('socket.io');
var app = express.createServer();
var io = socketio.listen(app);
app.use(express.static(__dirname + ''));
app.listen(80);
io.set('transports', ['websocket', 'flashsocket']);
io.sockets.on('connection', function (socket) {
socket.json.send({'message' : 'start'});
socket.on('message', function (msg) {
var time = (new Date()).getTime();
console.log("PING WAS: "+(time - msg.timestamp)+" ms");
socket.json.send({'timestamp' : (new Date()).getTime()});
});
});
クライアントコード:
window.onload = function() {
socket = io.connect('http://localhost:80');
socket.on('message', function (msg) {
socket.json.send({'timestamp' : msg.timestamp});
});
};