Повторное использование 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.