Управление таймаутом сердцебиения от клиента в socket.io

У меня есть мобильные клиенты, подключенные к серверу node.js, запускающие socket.io через xhr-опрос. У меня есть два типа клиентов:

Итак, мой вопрос заключается в том, как настроить (если это возможно) тайм-ауты сердечного ритма у фактического клиента?

Насколько я могу судить, есть два значения, которые имеют значение здесь: сервер посылает пульс клиенту каждый heartbeat interval секундами; клиент отвечает напрямую, если нет ответа, сервер решает, что клиент мертв. Клиент ждет биение сердца с сервера за heartbeat timeout за считанные секунды с момента последнего биения (что, очевидно, должно быть выше heartbeat interval ). Если он не получил слово с сервера в heartbeat timeout с heartbeat timeout в heartbeat timeout , он предполагает, что сервер мертв (и начнет отсоединение / повторное подключение на основе других параметров, которые вы установили.

Значения по умолчанию – heartbeat interval = 25s и время heartbeat timeout = 60s . Оба элемента настроены на сервере, heartbeat timeout отправляется клиенту при подключении.

Изменение heartbeat timeout для одного клиента легко:

 var socket = io.connect(url); socket.heartbeatTimeout = 20000; // reconnect if not received heartbeat for 20 seconds 

Однако на сервере значение heartbeat interval видимому, является частью общего объекта (диспетчер – это то, что вы возвращаете из своего вызова var io = require("socket.io").listen(server) ), что означает что его нельзя легко изменить для отдельных сокетов.

Я уверен, что с некоторыми хакерскими атаками socket.io вы должны иметь возможность сделать это, но вы можете сломать другие вещи в этом процессе …

В socket.io 1.x API изменился, но концепция осталась прежней.

Вместо heartbeatInterval и heartbeatTimeout, свойства pingInterval и pingTimeout. Например,

 var server = app.listen(80); io = socketio(server,{'pingInterval': 45000}); 

См. Документацию по адресу http://socket.io/docs/server-api/#server(opts:object) , которая направит вас на https://github.com/Automattic/engine.io#methods-1 .

Чтобы завершить ответ Клода, вы можете установить эти значения на рычаге сервера, используя следующий код

 io.set('heartbeat interval', 5); io.set('heartbeat timeout', 11); 

а затем вы можете создать 2 node.js-сервера, по одному для каждого типа клиентов (A и B), имеющих 2 желаемых набора параметров (тайм-аут и интервал сердцебиения).

  • Клиент Java socket.io
  • Перемещение из socket.io в raw websockets?
  • В чем разница между io.sockets.emit и трансляцией?
  • Обработать перезагрузку браузера socket.io
  • Получить IP-адрес клиента в socket.io
  • Каков пример простейшего возможного примера Socket.io?
  • Аутентификация Socket.IO
  • Примеры использования RedisStore в socket.io
  • Как подключить два сервера node.js с websockets?
  • Отправить пользовательские данные вместе с handshakeData в socket.io?
  • отключение клиента от сервера с помощью socket.io и nodejs
  • Давайте будем гением компьютера.