有没有一种方法可以在一个页面上打开一个WebSocket,然后在另一个页面上重用它(例如,在同一个选项卡中,在用户点击链接后),而不是在每次页面加载后打开一个新的WebSocket?浏览器存储是否能够保持开放的套接字?目标是能够保持每个用户(或标签)一个WebSocket,并且不需要以非传统的方式在页面之间移动,例如每次用户与页面交互时使用Javascrpt将内容加载到div中。
cpjpxq1n1#
答案是**不。即使套接字没有通过调用mySocket.close();显式关闭,浏览器也会在重新加载时关闭套接字。我尝试将Web Socket对象存储在本地存储中,并再次使用它检索数据。返回的对象是有效的,但连接不再存在。因为,当页面重新加载时,套接字会被不优雅地终止。在服务器端的消息说:
mySocket.close();
[Errno 10053] An established connection was aborted by the software in your host machine
给你
wtzytmuj2#
一种不同的方法是在不同的页面上保留用户而不是套接字。我的意思是你用JavaScript将客户端的ID存储在cookie中,每次用户试图从你的任何网站页面打开一个新的套接字时,你将这个ID发送到服务器,然后服务器有办法知道这个新的连接来自同一个用户。我在最近的一个项目中做了这件事,它工作得很好:)根据你打算做什么,你可以用他的ID在你的服务器上保存用户的状态,或者将其存储在其他cookie中,或者使用flash将其存储在共享对象中!
icnyk63a3#
共享Web Workers允许您共享从同一来源/站点加载的多个选项卡的WebSocket连接。目前仅Chrome, Safari, Opera支持共享Web Workers。
3pmvbmvn4#
WebSocket连接本质上是从HTTP升级到WSS的HTTP连接。它通过TCP连接,一旦客户端/服务器离开它,它将被关闭。您可以将连接数据存储到localStorage/cookie/任何其他地方,但这就是全部。连接数据,连接本身将在页面重新加载时由服务器终止。所以,答案是否定的。连接不能在页面重新加载时保持。
4条答案
按热度按时间cpjpxq1n1#
答案是**不。
即使套接字没有通过调用
mySocket.close();
显式关闭,浏览器也会在重新加载时关闭套接字。我尝试将Web Socket对象存储在本地存储中,并再次使用它检索数据。返回的对象是有效的,但连接不再存在。因为,当页面重新加载时,套接字会被不优雅地终止。
在服务器端的消息说:
给你
wtzytmuj2#
一种不同的方法是在不同的页面上保留用户而不是套接字。我的意思是你用JavaScript将客户端的ID存储在cookie中,每次用户试图从你的任何网站页面打开一个新的套接字时,你将这个ID发送到服务器,然后服务器有办法知道这个新的连接来自同一个用户。
我在最近的一个项目中做了这件事,它工作得很好:)根据你打算做什么,你可以用他的ID在你的服务器上保存用户的状态,或者将其存储在其他cookie中,或者使用flash将其存储在共享对象中!
icnyk63a3#
共享Web Workers允许您共享从同一来源/站点加载的多个选项卡的WebSocket连接。
目前仅Chrome, Safari, Opera支持共享Web Workers。
3pmvbmvn4#
WebSocket连接本质上是从HTTP升级到WSS的HTTP连接。它通过TCP连接,一旦客户端/服务器离开它,它将被关闭。
您可以将连接数据存储到localStorage/cookie/任何其他地方,但这就是全部。连接数据,连接本身将在页面重新加载时由服务器终止。
所以,答案是否定的。连接不能在页面重新加载时保持。