在页面之间重用websockets?

时间:2012-03-06 06:02:00

标签: websocket

有没有办法在一个页面上打开websocket,然后在另一个页面上重复使用(例如,在用户单击链接后,在同一个选项卡中),而不是在每个页面加载后打开一个新的websocket ?浏览器存储能够保持打开的套接字吗?

目标是能够为每个用户(或标签)保留一个websocket,这样做很棒,而不需要以非传统方式在页面之间移动,例如使用Javascrpt将内容加载到div中每次用户与页面交互时。

3 个答案:

答案 0 :(得分:7)

答案是

即使未通过调用mySocket.close();显式关闭套接字,浏览器也会在重新加载时关闭套接字。

我尝试将Web Socket对象存储在本地存储中并使用它再次检索数据。返回的对象是有效的,但连接不再存在。因为,当页面重新加载时,套接字被非正常地终止。

服务器端的消息说:

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

你去......

答案 1 :(得分:7)

不同的方法是在不同页面上保持用户而不是套接字。我的意思是你用javascript将客户端的ID存储在cookie中,每次用户尝试从你的任何网站页面打开一个新的套接字时,你将这个ID发送到服务器然后服务器有办法知道这个新连接来自同一个用户。

我在最近的一个项目中完成了它并且它完美运行:)根据您计划要做的事情,您可以使用他的ID保持服务器上的用户状态,或将其存储在其他cookie中,或事件使用flash将其存储在共享对象中!

答案 2 :(得分:2)

共享Web Workers允许您为从同一源/站点加载的多个选项卡共享WebSocket连接。

目前仅Chrome, Safari, Opera支持共享Web Workers。