Повторное использование websockets между страницами?

есть ли способ открыть websocket на одной странице, а затем повторно использовать его на другой странице (в той же вкладке, после того, как пользователь нажимает на ссылку, например), а не открывать новый websocket после каждой загрузки страницы? Может ли хранилище браузера удерживать открытый сокет?

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

3 ответов


ответ нет.

даже если сокет явно не закрыт, вызывая mySocket.close();, сокет будет закрыт браузером при перезагрузке.

Я попытался сохранить объект Web Socket в локальном хранилище и использовать его для повторного получения данных. Возвращаемый объект действителен, но соединение больше не существует. Потому что, когда страница перезагружается, сокет не изящно завершается.

сообщение на сервере говорит:

[Errno 10053] An established connection was aborted by the software in your host machine

там вы идете...


A разный подход было бы сохранить пользователя вместо сокета на разных страницах. Под этим я подразумеваю, что вы храните идентификатор клиента в файле cookie с javascript, каждый раз, когда пользователь пытается открыть новый сокет с любой из страниц вашего сайта, вы отправляете этот идентификатор на сервер, а затем сервер имеет способ узнать, что это новое соединение от того же пользователя.

Я сделал это в недавнем проекте, и он отлично работает :) в зависимости от того, что вы планируете вы можете сохранить состояние пользователя на своем сервере с его идентификатором, или сохранить его в другом файле cookie, или использовать flash для хранения его в общем объекте !


Shared Web Workers позволит вам совместно использовать соединения WebSocket для нескольких вкладок, загружаемых из одного источника / сайта.

общие веб-работники в настоящее время поддерживаются только на Chrome, Safari, Opera.