node.js sockets.io отключается каждые ~ 25 секунд (сердцебиение) - PullRequest
8 голосов
/ 05 марта 2012

Я пытаюсь настроить сервер node.js, используя socket.io. Проблема, которую я вижу, состоит в том, что мой сервер отключается + переподключается клиент каждые 25 секунд.

Вот мой код сервера:

var io = require('socket.io').listen(5876);
io.sockets.on('connection', function (socket)
{
    console.log("New connection established");

    socket.on('disconnect', function()
    {
        console.log("A client has disconnected.");
    });
}

Мой клиент подключается с помощью дистрибутива socket.io.js. Насколько я понимаю (очевидно, неправильно), мне нужно, чтобы мой клиент отправлял «биение» (сообщение «:: 2») каждые 15 секунд, чтобы сервер не думал, что соединение разорвано, и отключил его. В основном:

<script src="socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost:5876');

    socket.on('connect', function(data)
    {
        console.log("Connected to server.");
        setInterval(function() { socket.emit("::2"); console.log("sent heartbeat"); }, 15000); // schedule a heartbeat for every 15 seconds
    });
</script>

Но клиент по-прежнему отключается + подключается каждые 25 секунд (исключая самый первый тик 25-й секунды).

Журнал консоли сервера node.js выглядит следующим образом (возможно, были отключены некоторые ранее идентичные фазы подключения / отключения, которые повторялись каждые 25 секунд):

New connection established
   debug - emitting heartbeat for client 652791160849839915
   debug - websocket writing 2::
   debug - set heartbeat timeout for client 652791160849839915
   debug - got heartbeat packet
   debug - cleared heartbeat timeout for client 652791160849839915
   debug - set heartbeat interval for client 652791160849839915
   info  - transport end
   debug - set close timeout for client 652791160849839915
   debug - cleared close timeout for client 652791160849839915
   debug - cleared heartbeat interval for client 652791160849839915
A client has disconnected.
   debug - discarding transport
   debug - client authorized
   info  - handshake authorized 5961067041159055274
   debug - setting request GET /socket.io/1/websocket/5961067041159055274
   debug - set heartbeat interval for client 5961067041159055274
   debug - client authorized for
   debug - websocket writing 1::
New connection established

Как я могу предотвратить отключение моего сервера + повторное подключение клиента каждые 25 секунд?

Ответы [ 2 ]

9 голосов
/ 05 марта 2012

Используете ли вы последнюю версию socket.io, 0.9.1 / 0.9.1-1?Если это так, то это известная проблема, подтвержденная Гильермо.Текущая рекомендация - откат к 0.9.0 или 0.8.7

https://github.com/LearnBoost/socket.io/issues/777

2 голосов
/ 05 марта 2012

вам не нужно отправлять сердцебиение, чтобы держать сокет подключенным, также синтаксис socket.emit равен

          socket.emit('event_name',{"data"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...