2016-10-24 21 views
0

Я использую node.js и socket.io на сервере Linode. Мне сказали, что я должен использовать KeepAlives с моим приложением, чтобы использовать Linode NodeBalancer. Мне также сказали, что мне нужно установить протокол NodeBalancer для использования TCP, а не (HTTP или HTTPS, которые оба запрещают KeepAlives).Содержит ли ручка socket.io keepalives автоматически?

Мой вопрос в том, что KeepAlives уже реализован в socket.io по умолчанию? Кажется, что что-то поддерживает связь, так что я думаю, что это уже обрабатывается socket.io. Тем не менее, я не могу найти какую-либо информацию по этой теме. Если KeepAlives по умолчанию не реализован в socket.io, какие проблемы я буду сталкиваться с помощью NodeBalancer? Если я должен внедрять KeepAlives, какие шаги мне нужно предпринять, чтобы реализовать их в моем приложении?

В качестве дополнительного вопроса, если KeepAlives реализованы в socket.io, с какими проблемами столкнуться, если я использую параметр HTTP, а не TCP?

+0

Что вы имеете в виду вариант HTTP? Вы имеете в виду socket.io http polling? Eeeck, почему в мире вы бы это сделали? Опрос значительно менее эффективен, чем соединение webSocket. FYI, как HTTP, так и socket.io используют TCP под этим, поэтому я не уверен, почему вы вызываете один параметр TCP. И только для полноты подключения socket.io начинается также с HTTP-запроса. – jfriend00

+0

@ jfriend00 По опции HTTP я имею в виду вариант HTTP, доступный для Linode NodeBalancer (как упоминалось в моем первом абзаце). – kojow7

ответ

2

Мой вопрос в том, что KeepAlives уже реализован в socket.io по по умолчанию?

Да, ping пакет (очень маленький WebSocket пакет) отправляется каждый так часто, как биение сердца «тест» на подключение и убедитесь, что она по-прежнему функционирует и сохранить его живым. A pong пакет возвращается из запроса ping, чтобы отправитель знал, прошел ли ping или нет.

Этот пинг аспект Socket.io очень плохо документированы, но, исследуя source code of engine.io, который Socket.io использует, существует как pingTimeout (как долго ждать ответа pong и pingInterval (как часто, чтобы отправить ping).

+0

@ kojow7 - Это ответ на ваш вопрос? – jfriend00

3

Да. И вы можете установить параметры.

var myApp = require('express')(); 
 
var http = require('http').Server(myApp); 
 

 
var io = require('socket.io')(http, {'pingTimeout': 7000}, 'pingInterval': 3000);