Socket.IO: задержка опроса XHR при отключении - PullRequest
7 голосов
/ 08 июня 2011

Я работаю с socket.io и node.js.У меня возникают проблемы с отслеживанием того, какие пользователи находятся в сети, из-за задержки в несколько секунд до того, как IO сокета распознает, что клиент XHR-Polling отключился.

Если клиент XHR-Polling обновляет страницу, его новое соединениесообщение, кажется, предшествует их сообщению об отключении.Это вызывает путаницу при попытке отследить, какие пользователи подключены к сети.

Одним из решений может быть обнаружение метода транспорта на стороне сервера и задержка соединения для клиентов XHR-Polling, чтобы убедиться, что функции отключения выполнялись первыми.

Кто-нибудь испытывал это?

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

Основная проблема с присутствием, как отмечают @davin и @jcolebrand в комментариях, заключается в том, что нельзя полагаться только на соединения. Сетевые устройства могут удерживать подключения после того, как пользователь ушел со страницы. Итак, вам нужно что-то еще для подтверждения присутствия пользователей.

Это то, для чего мы добавили поддержку в Pusher , и мы делаем это, используя нечто, называемое Каналы присутствия .

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

Та же идея применима и к HTTP-соединениям.

Общий подход для этого заключается в использовании сеанса для однозначной идентификации пользователя. Таким образом, даже если они просто «Гость», вы все равно можете идентифицировать их, если они разрешают использование файлов cookie.

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

Надеюсь, это поможет. Дайте мне знать, если вы хотите что-то разъяснить.

1 голос
/ 21 августа 2012

Какую версию socket.io вы используете? Я столкнулся с этой проблемой и решил ее в этом посте . Оказывается, в socket.io 0.9.5 была введена ошибка, связанная с запросом, отправленным, когда было вызвано событие beforeunload, что помешало правильному отключению.

1 голос
/ 12 июля 2011

Я разрабатываю решение для поддержки чата, и посетитель должен знать, когда клиент подключится. С websocket работает нормально, но с whr-пулом иногда просто отключается посетитель (с 5 секундами в некоторых случаях). Иногда не помогает. Что я делаю: я просто захожу на страницу и жду, глядя приложение терминала.

Я использую nodejs, nowjs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...