Отключение сердечных сокращений Socket.io (Node.js)
В документации к socket.io упоминается, что сердцебиение можно отключить следующим образом:
io.disable('heartbeats');
К сожалению, хотя это, кажется, мешает отправке звуковых ударов, клиенты по-прежнему отключаются, когда они не отправляют звуковые удары.
Следующее также не работает:
io.set('heartbeats', false);
Я попытался установить некоторые интервалы в 0, но безуспешно:
io.set('heartbeat timeout', 0);
io.set('heartbeat interval', 0);
Любые предложения о том, что может правильно отключить сердцебиение?
3 ответа
Код
io.disable('heartbeats');
Успешно протестирован на socket.io v0.8.7
Без отключения
debug - emitting heartbeat for client 299833185260419425
debug - websocket writing 2::
debug - set heartbeat timeout for client 299833185260419425
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 299833185260419425
debug - set heartbeat interval for client 299833185260419425
С отключением
отладка - клиент авторизован
info - handshake authorized 1205975980561506547
debug - setting request GET /socket.io/1/websocket/1205975980561506547
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"news","args":[{"hello":"foo"}]}
Что-то не так с сердцебиением. У меня последняя версия socket.io и узел 0.6.X
info - socket.io started
debug - client authorized
info - handshake authorized 734447051478827620
debug - setting request GET /socket.io/1/websocket/734447051478827620
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"hello"}
info - transport end (socket end)
debug - set close timeout for client 734447051478827620
debug - cleared close timeout for client 734447051478827620
debug - discarding transport
// server code
var io = require('socket.io').listen(8080);
io.disable('heartbeats');
io.sockets.on('connection', function (socket) {
socket.emit('hello');
});
Клиент отключается сразу после подключения.
Установите уровень журнала socket.io, при уровне журнала 2 мы не увидим все сердцебиения каждого сокета, а только рукопожатия и разъединения
io.set('log level', 2);