У меня есть приложение клиент/сервер, использующее nodejs на сервере и socket.io в качестве механизма подключения. По причинам, относящимся к моему приложению, я хочу иметь только одно активное подключение для каждого браузера и отклонять все подключения с других вкладок, которые могут быть открыты позже во время сеанса. Это прекрасно работает с WebSockets, но если WebSockets не поддерживаются браузером и вместо этого используется XHR-опрос, отключение никогда не происходит, поэтому, если пользователь просто обновляет страницу, это не интерпретируется как повторное подключение (у меня есть задержка для переподключение и восстановление сеанса), а как новую вкладку, которая заканчивается отклонением соединения, поскольку старое соединение, созданное этой же вкладкой, все еще активно.
Я ищу способ эффективно завершить соединение с клиентом всякий раз, когда происходит обновление. Я пытался привязаться к beforeunload
и вызвать socket.disconnect()
на стороне клиента, а также отправить сообщение типа socket.emit('force-disconnect')
и вызвать отключение от сервера без успеха. Я что-то упустил здесь? Ценю вашу помощь!
Я прочитал этот вопрос и не смог не нахожу это полезным для моего конкретного случая.