У меня есть два браузера 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 после повторного подключения будет немедленно закрыт с причиной передачи: закрыт, а не тайм-аут.
Похоже, что существует некорректное поведение, которое выбирает отключенные сокеты в тайм-аут для того, чтобы какой-либо другой сетевой сокет попытался испустить сообщение в той же комнате. Когда сообщение с эмиссией не может быть отправлено в отключенный сокет (на стороне клиента), этот сокет, вероятно, будет выбран для немедленного закрытия транзакции после повторного подключения в тайм-аут.
вы что-то пробовали? –
Думаю, что да. Я решил это по-другому. Я добавил setTimeout для функций, которые выполняются при отключении. Таким образом, я могу получить данные, хранящиеся в переменной из старого сокета, в новый сокет, потому что во время таймаута новый сокет принимает эти данные в пределе функции setTimeout. –
Кто-нибудь знает лучшее решение? –