народ!Можно ли отправить соединение с клиентом веб-соединения?
У меня есть следующий сценарий:
Я бегу сервер Торнадо с WebSocketHandler, который обрабатывает открытые, ON_MESSAGE и ON_CLOSE событий на WebSocket:
class WebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): (...) def on_message(self, message): (...) def on_close(self): (...)
У меня есть просмотреть, где клиент открывает новый WebSocket и устанавливает обработчик событий «onmessage»:
window.onload = function() { ws = new WebSocket("ws://192.168.0.51:8080/websocket"); ws.onmessage = function(e) { console.log(e.data); }; }
Я хотел бы немного изменить этот пример, чтобы «повторно использовать» соединение с websocket, если пользователь, скажем, открывает новую вкладку в своем браузере, но у него уже открыт веб-узел на стороне сервера.
Я собираюсь сделать это, отправив уникальный идентификатор пользователя при первом обращении к серверу и проверке ответа, прежде чем открывать сокет.
Вопрос: Если сервер Tornado обнаруживает, что пользователь уже имеет открытое соединение (WebSocket), можно послать этот пользователь (клиент) ссылку на эту связь, с тем чтобы дать возможность стороны клиента кода использовать его вместо создания нового?
Заранее благодарен!
Большинство браузеров откроет совершенно новый экземпляр и не будет повторно использовать элементы на других вкладках, даже если это тот же сайт. Смысл, клиент (браузер) заставит новое соединение ни на что. Это фундаментальное мышление за всем web-trabbic, это New-> Open-> Request-> Get-> Show requestlyne, где вы постоянно работаете с новыми подключениями :) Я понимаю, чего вы хотите достичь, но, к сожалению, упомянутый браузер не будет учитывать, что вы говорите «эй, у вас уже есть соединение открыто», и он просто попросит новое открытие, потому что это иногда быстрее, чем повторное использование. – Torxed
Спасибо за быстрый ответ @Torxed! В самом деле, это имеет смысл. Я изменю aproach, чтобы ограничить количество открытых сокетов на пользователя. Еще раз спасибо :) – maccinza