2014-02-06 50 views
1

伙计!是否可以向客户端发送WebSocket连接?

我有以下情形:

  • 我运行与处理开放,ON_MESSAGE和on_close上的WebSocket事件WebSocketHandler龙卷风服务器:

    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,我想稍微改变这个例子来“重用”一个websocket连接。

    我打算通过在向服务器发出第一个请求并在打开套接字之前检查响应时发送用户唯一标识来执行此操作。

    问题是:如果龙卷风服务器检测到用户已经有一个打开的连接(的WebSocket),是否有可能以发送给该用户(客户端)到其连接的引用,以使客户端侧的代码使用它而不是创建一个新的?

在此先感谢!

+1

大多数浏览器会打开一个全新的实例,即使它是同一个站点,也不会重复使用其他选项卡上的项目。意思是,客户端(浏览器)无论如何都会强制建立一个新的连接。这是所有web-trabbic背后的基本思想,这是一个New-> Open-> Request-> Get-> Show request storynene,你不断地处理新的连接:)我明白你想达到的目的,但遗憾的是,提到浏览器不会考虑到你说“嘿,你已经有一个连接打开”,它只会要求一个新的开放,因为它有时比重用更快 – Torxed

+0

感谢您的快速回答,@Torxed!事实上,这是有道理的。我会改变方法来限制每个用户打开套接字的数量。 再次感谢:) – maccinza

回答

1

原则上,这可以通过从共享后台Web工作者打开WebSocket连接来实现。

所有浏览器都不支持从Web工作者打开WebSocket连接。我知道它适用于Chrome和IE11上的专用Web工作人员,并且它不适用于Firefox。

我不知道哪些浏览器支持从开启WebSocket连接共享 Web工作者。

+0

谢谢,oberstet!我会试一试! – maccinza

相关问题