Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在页面之间重用WebSocket?_Websocket - Fatal编程技术网

在页面之间重用WebSocket?

在页面之间重用WebSocket?,websocket,Websocket,有没有一种方法可以在一个页面上打开websocket,然后在另一个页面上重新使用它(例如,在用户单击链接后,在同一个选项卡中),而不必在每次页面加载后打开新的websocket?浏览器存储是否能够容纳打开的套接字 这样做的目的是让每个用户(或选项卡)只保留一个websocket,而不需要以非传统的方式在页面之间移动,例如每次用户与页面交互时都使用Javascrpt将内容加载到一个div中,这将是非常棒的 共享Web Workers允许您为从同一来源/站点加载的多个选项卡共享WebSocket连接

有没有一种方法可以在一个页面上打开websocket,然后在另一个页面上重新使用它(例如,在用户单击链接后,在同一个选项卡中),而不必在每次页面加载后打开新的websocket?浏览器存储是否能够容纳打开的套接字


这样做的目的是让每个用户(或选项卡)只保留一个websocket,而不需要以非传统的方式在页面之间移动,例如每次用户与页面交互时都使用Javascrpt将内容加载到一个div中,这将是非常棒的

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


共享Web Worker当前仅在上受支持。

答案是

即使套接字没有通过调用
mySocket.close()显式关闭,重新加载时浏览器将关闭套接字

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

服务器端的消息说:

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

好了…

不同的方法是让用户而不是套接字在不同的页面上。我的意思是,您使用javascript将客户端ID存储在cookie中,每次用户尝试从您的任何网站页面打开新套接字时,您都会将此ID发送到服务器,然后服务器就可以知道此新连接来自同一用户


在最近的一个项目中,我已经做到了这一点,它工作得非常完美:)根据您的计划,您可以使用用户ID在服务器上保存用户的状态,或者将其存储在其他cookie中,或者使用事件flash将其存储在共享对象中

创建websocket连接时,存在连接双方必须跟踪的某种状态,以便连接存在。我认为,如果您将连接的客户端状态存储在本地存储中(请注意,必须修改websocket系统的客户端以允许这样做,就我所知,大多数甚至所有websocket客户端都不支持这样做),您可能可以稍后甚至在另一个页面上重新打开连接(只要服务器没有放弃它的一半状态)。所以这一定是可能的,但是如何实现呢?我希望看到一个工作示例。我想这是为了“重新创建”像服务器那样的websocket也必须支持它。或者更具体地说,是用于在服务器上实现websocket支持的库。我怀疑服务器上的大多数实现在检测到底层TCP连接已关闭时都会关闭websocket,尽管您建议对客户端进行的更改可能会使其无法运行pen.是的,websocket连接并不能比作为传输创建的tcp连接更有效,我认为它们更聪明。可能是@kanaka的重复,不是。这是关于websocket的,你的链接是关于web workers的,这是两种不同的技术。抱歉,我的问题不够清楚。当我说不同的页面时,我应该“我已经在同一个选项卡中指定了。我编辑了我的问题,希望能让这个问题更清楚。不过,谢谢你试一试。@Joshua:啊,那么你问的问题和我刚才问的一样:这个问题也没有明确的答案,我打算在某个时候测试它在Chrome/Safari中是否有效。是的,问题是si。”milar,而不是我希望WebSocket可能有一些不同之处,这意味着我可能会得到不同的答案。是的,这是完全可能的,并且是一个完全有效的解决方案(我们讨论过)但底层架构依赖于websocket保持打开状态以满足某些功能需求。当然,打开和关闭套接字可能会导致的问题可以得到缓解,但最终决定最好保持套接字打开并根据loc动态加载内容改为URL的连接属性。不确定这是不是更好的方法,但这是一种生活。@WiMantis您在服务器端使用的是哪种websocket连接管理器?我很好奇,如果您将websocket(或其引用)放入本地存储,会发生什么。感谢您尝试并解决了这个谜。