Сохранять соединение сокета при загрузке новой страницы - PullRequest
1 голос
/ 09 мая 2020

У меня есть небольшой проект с socket.io и node.js. По сути, целевая страница (индекс html) - это комната ожидания для игроков, которые могут согласиться играть друг с другом. В этом случае я хочу перенаправить их на другой html (game. html, который находится в той же папке, что и index. html). Я хочу сохранить соединение сокета, так как во время игры должна быть связь с сервером. Я пробовал два способа, но оба потерпели неудачу. В каждом случае я изменяю расположение window.location на стороне клиента (как описано здесь ).

1) В файле javascript индекса. html я добавил экспорт объекта сокета: export const socket = io(); Затем я импортировал этот объект в другой файл javascript, связанный с игрой. html. Но по какой-то причине это не работает.

2) Я добавил еще const socket = io(); в файл javascript, связанный с игрой. html. Тогда я могу использовать этот объект. Но, как и ожидалось, это устанавливает новое соединение, а предыдущее соединение теряется.

EDIT: Я также задал вопрос здесь в комментарии. Там я узнал, что эту проблему особо не исправить. Поэтому я просто визуализирую game. html внутри index. html (выполняя манипуляции с DOM в main. js).

Ответы [ 2 ]

1 голос
/ 25 мая 2020

jfriend00 пишет здесь :

Так работают соединения webSockets и socket.io. Они действуют ТОЛЬКО на протяжении всей страницы. Когда вы go переходите на новый URL-адрес и загружаете новую страницу, предыдущее соединение socket.io закрывается, и ваш код на новой странице может свободно создать новое. Вот как все работает в браузере.

1 голос
/ 09 мая 2020

Мартин, Если вы перенаправляете клиента на другую конечную точку, то нужно инициировать новое рукопожатие с сервером, чтобы вы получили новый socket.id. Какую информацию выдает ваш сервер? Можете ли вы просто повторно отрендерить DOM, отражая новые данные, вместо того, чтобы переходить в совершенно другой файл? Может ли управление состоянием React смягчить вашу проблему?

Я мог бы помочь вам, если вы дадите мне пример кода.

...