2016-05-16 3 views
0

У меня есть два браузера socket.io клиентов. Например. Клиент A и Клиент B, и они подключены к номеру 1.Socket.io - сторона сервера nodejs. передача закрыть после повторного подключения

Следующее поведение происходит на моем компьютере (установлено nodejs 5, socket.io 1.4.5): Мы предполагаем, что оба клиента подключены к Room One. Когда Клиент A отключен (потеряет соединение) и повторно подключается после таймаута, и клиент B не использует emit для отправки сообщения в Комнату 1, тогда исходный разъем клиента A будет закрыт с причиной передачи: timeouted. Это хорошо для меня. Мне это нужно.

С другой стороны: Когда клиент A отключен (потеряет соединение) и снова подключается к тайм-ауту, а клиент B в течение этого отключенного времени использует излучение для отправки сообщения в комнату 1, то исходное гнездо клиента A после повторного подключения будет немедленно закрыт с причиной передачи: закрыт, а не тайм-аут.

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

+0

вы что-то пробовали? –

+0

Думаю, что да. Я решил это по-другому. Я добавил setTimeout для функций, которые выполняются при отключении. Таким образом, я могу получить данные, хранящиеся в переменной из старого сокета, в новый сокет, потому что во время таймаута новый сокет принимает эти данные в пределе функции setTimeout. –

+0

Кто-нибудь знает лучшее решение? –

ответ

0

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

Ситуация выше отличается для системы Mac. Сокет отключен, либо тайм-аут ушел, либо немедленно, если клиентский мобильный телефон снова подключен.

Может ли кто-нибудь помочь в том, что является причиной того, что это поведение на той же версии узла (6.2) и той же версии сокета (1.4.6) отличается?

+0

Кто-нибудь не знает решения? В самом деле? –

Смежные вопросы