Задержка с использованием socket.io - PullRequest
1 голос
/ 30 марта 2012

Я начал использовать socket.io для веб-игры.

Используя nodejs express server, я попытался написать простой тест. В этом тесте сервер записывает метку времени клиенту, а клиент возвращает эту метку времени. После этого сервер регистрирует время, использованное для отправки туда и обратно.

Результат был: 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});
    });
};
...