2014-02-06 3 views
1

народ!Можно ли отправить соединение с клиентом веб-соединения?

У меня есть следующий сценарий:

  • Я бегу сервер Торнадо с 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), можно послать этот пользователь (клиент) ссылку на эту связь, с тем чтобы дать возможность стороны клиента кода использовать его вместо создания нового?

Заранее благодарен!

+1

Большинство браузеров откроет совершенно новый экземпляр и не будет повторно использовать элементы на других вкладках, даже если это тот же сайт. Смысл, клиент (браузер) заставит новое соединение ни на что. Это фундаментальное мышление за всем web-trabbic, это New-> Open-> Request-> Get-> Show requestlyne, где вы постоянно работаете с новыми подключениями :) Я понимаю, чего вы хотите достичь, но, к сожалению, упомянутый браузер не будет учитывать, что вы говорите «эй, у вас уже есть соединение открыто», и он просто попросит новое открытие, потому что это иногда быстрее, чем повторное использование. – Torxed

+0

Спасибо за быстрый ответ @Torxed! В самом деле, это имеет смысл. Я изменю aproach, чтобы ограничить количество открытых сокетов на пользователя. Еще раз спасибо :) – maccinza

ответ

1

В принципе, этого можно добиться, открыв соединение WebSocket от общего веб-рабочего.

Открытие соединений WebSocket от веб-рабочих не поддерживается (пока) всеми браузерами. Я знаю, что он работает с выделенными веб-рабочими в Chrome и IE11, и он не работает с Firefox.

Я не знаю, какие браузеры поддерживают открытие соединений WebSocket от поделились Работники Web.

+0

Спасибо, оберстет! Я попробую! – maccinza

Смежные вопросы