保存要在不同页面上使用的用户的套接字

时间:2014-12-07 10:30:20

标签: javascript node.js sockets socket.io

说明:

我有以下代码片段,似乎效果很好

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>

 var socket = io();

</script>

现在使用套接字创建我正在使用它来执行用户想要的不同任务,例如用户正在与其他在线人聊天...现在,如果用户导航到其他页面并执行其他操作,那该怎么办...为此我要去需要分配给该用户的同一个套接字...我在服务器端有一个数组,它包含连接用户的所有套接字及其ID ...

在访问网站的不同页面时,如何随时随身携带套接字..

例如,我单击一个链接,然后将我带到一个页面...现在我在该页面上发布了一些内容,因为我想要给我的套接字。

2 个答案:

答案 0 :(得分:1)

您无法将套接字从一个页面保留到下一个页面。

如果用户要在页面之间导航,那么您需要做两件事:

  1. 在加载每个页面时,将套接字重新连接到新加载页面的服务器。
  2. 在服务器上,处理断开事件,以便您可以从导航的用户中删除套接字,然后处理connect事件的常规代码将在新页面上重新连接。

  3. 您的另一个选择是更改您的应用程序,以便更改页面内容,但实际上从未导航到新URL,从而在用户更改内容时保留Javascript状态(以及任何连接的套接字)。这有时称为单页设计。您通常会使用Ajax调用来获取新内容,然后使用DOM操作调用来更改用户在浏览器中看到的内容。

答案 1 :(得分:0)

您可以通过创建单个页面应用程序(网站)来实现此目的,该应用程序使用Ajax加载所有内容,而不是从基页导航。

其他旧的脏解决方案(可能更复杂)是使用带iframe的页面并加载其中的所有内容,但将SocketIO实例保留在父页面中。请注意,在这种情况下,页面的网址不会更改,因此用户将无法正确添加书签。