有没有一种方法可以在一个页面上打开一个websocket,然后在另一个页面(例如,在同一个选项卡中,用户单击链接后)重用它,而不是在每次加载页面后都打开一个新的websocket?浏览器存储是否能够容纳打开的插槽?
其目的是能够为每个用户(或选项卡)保留一个websocket,这样做将非常好,而不需要以非传统的方式在页面之间移动,例如每次用户与页面交互时使用Javascrpt将内容加载到div中。
答案是否。
即使调用mySocket.close();
没有显式关闭套接字,浏览器也会在重新加载时关闭套接字。
我尝试将Web套接字对象存储在本地存储中,并再次使用它来检索数据。返回的对象是有效的,但连接已不存在。因为,当页面重新加载时,套接字会不正常地终止。
服务器端的消息说:
[Errno 10053] An established connection was aborted by the software in your host machine
给你。。。
不同的方法是在不同的页面上保留用户而不是套接字。我的意思是,你用javascript将客户端的ID存储在cookie中,每次用户试图从你的任何网站页面打开一个新的套接字时,你都会将这个ID发送到服务器,然后服务器就可以知道这个新连接来自同一用户。
我在最近的一个项目中做到了这一点,效果很好:)根据你的计划,你可以用他的ID将用户的状态保存在服务器上,或者将其存储在其他cookie中,或者使用flash将其存储到共享对象中!
Shared Web Workers将允许您共享从同一来源/站点加载的多个选项卡的WebSocket连接。
共享网络工作者目前仅在Chrome、Safari和Opera上受支持。
websocket连接本质上是从HTTP升级到WSS的HTTP连接。它通过TCP连接,一旦客户端/服务器离开它,它就会关闭。
您可以将连接数据存储到localStorage/cookies/其他任何位置,但仅此而已。一旦页面重新加载,服务器就会终止连接数据。
所以,答案是否定的。连接不能在页面重新加载时持久化。