Socket.io переподключается, повторно запускает, подключается? - PullRequest
6 голосов
/ 12 марта 2012

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

Когда пользователь подключается, узел передает обратную информацию, которая сообщает клиенту о подписке на определенные события.,Это прекрасно работает.

Но если вы позволите браузеру установить режим ожидания, клиент в итоге будет подписан на события дважды.Процесс подписки работает следующим образом:

Когда пользователь подключается к node.js, он получает сообщение 'adduser'

Вот две ключевые вещи, которые происходят в этой функции:

socket.on('adduser', function(data)
   <snip>
   socket.emit('nodeinfo', {node_id: NODE_ID});
   socket.emit('update', {msg: 'you are connected'});

socket.emit ('nodeinfo') сигнализирует клиенту о подписке на события.

Таким образом, у клиента есть

socket.on('nodeinfo', function(data) { ... }

Дело в том, что он никогда не говорит «вы подключены»'дважды, ни одна из функций console.log () в' adduser 'не вызывается снова на стороне узла.Единственное, что, по-видимому, происходит, это то, что node.js снова генерирует nodeinfo (или так думает клиент), вызывая повторную подписку клиента.

Может кто-нибудь объяснить мне, как работают повторные соединения в socket.io икак это может произойти?

1 Ответ

4 голосов
/ 13 марта 2012

По умолчанию клиент пытается восстановить соединение после отключения. Это можно изменить, если вам нравится: клиент socket.io

При повторном подключении сервер увидит новое соединение, и вы должны реализовать логику для идентификации нового соединения с предыдущим. Так на практике - вместо реализации вашей логики adduser при «соединении», сделайте это (или нет) после того, как клиент отправит некоторую информацию на сервер.

...