2012-03-05 2 views
8

Я пытаюсь настроить сервер node.js, используя socket.io. Проблема, которую я вижу, заключается в том, что мой сервер отключает + повторное подключение клиента каждые 25 секунд.node.js sockets.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. Насколько я понимаю (видимо, неправильно), мне нужно, чтобы мой клиент отправлял «heartbeat» (сообщение «:: 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 секунд?

+0

, насколько я знаю, вам не нужно вручную отправить сердцебиение пакеты, как это делается с помощью Socket.io. Попробуйте проверить события соединения и разъединения после того, как вы вынесете свои ручные биения. – f0x

+0

Вы когда-нибудь разрешали это? \t У меня есть точная проблема. Я понизил рейтинг до 0.8.7 и все тот же вопрос. отладочный тайм-аут для клиента 3744936361854682925 info - транспортный отладочный конец - установка таймаута закрытия для клиента 3744936361854682925 отладка - очищенный тайм-аут закрытия для клиента 3744936361854682925 –

+0

@PranoyC Здесь может возникнуть обходной путь: https://github.com/socketio/socket .io/issues/777 Кроме того, я недавно использовал новейшие версии socket.io и не столкнулся с какими-либо проблемами. – Josh1billion

ответ

9

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

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

+0

Это должно быть; Я только что установил его прошлой ночью, так что это, вероятно, последняя версия. Как я могу вернуться к 0.9.0? Я установил с использованием рекомендуемого метода npm, например: «npm install socket.io» – Josh1billion

+1

Вы можете указать конкретную версию для установки: npm install [email protected] – maroonmed

+0

Ах, отлично, спасибо! – Josh1billion

2

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

  socket.emit('event_name',{"data"}); 
Смежные вопросы