Безопасно ли устанавливать высокий тайм-аут закрытия на socket.io?

У меня есть веб-приложение, где пользователь должен быть постоянно подключен. По умолчанию socket.io отключит соединение через 60 секунд. Однако у меня включено "переподключение", поэтому оно по сути закрывает и открывает соединение каждую минуту. Это может вызвать проблемы с каналами / уведомлениями для моих подключенных клиентов. Будет ли безопасно установить этот тайм-аут, скажем, 10 минут или, возможно, выше? Есть ли причина, по которой он сейчас такой низкий?

3 ответа

Я думаю, что вы можете неправильно истолковать 'close timeout' конфигурации. Это не приводит к закрытию соединения через 60 секунд. (Сердцебиение было бы бессмысленным, если бы клиенты постоянно переподключались).

Если клиент отключается, close timeout количество времени, которое сервер будет ожидать, прежде чем освободить ресурсы, связанные с этим соединением. По сути, это позволяет клиентам с периодически возникающими проблемами подключения пытаться повторно подключиться до того, как сервер о них забудет. настройка close timeout Десять минут, вероятно, плохая идея, так как они будут связывать ресурсы сервера.

Если ваши клиенты на самом деле отключаются каждые 60 секунд, то, как сказал самджм, что-то еще не так.

Я не верю, что ваша розетка должна отключиться через 60 секунд. Я бы расследовал, почему это происходит на самом деле. После правильного установления связи сокет должен пульсировать и оставаться открытым в течение неопределенного времени (исключая проблемы с сетью вне вашего контроля) до тех пор, пока клиент или сервер не закроют соединение, что, безусловно, является моим опытом.

Тот факт, что ваше соединение на самом деле закрывается, звучит так, как будто это может быть некорректное рукопожатие или не принимается пульс.

Возможно, вы уже поняли это, но ваш сокет может отключиться через 60 секунд, потому что вы не отправляете пульс ("2::") обратно на сервер.

Вот некоторый код Python, который работает с клиентским модулем websocket.

# on_message handles messages from the server
def on_message(ws, message):
    if message[:3] == '2::':
        ws.send('2::')
Другие вопросы по тегам