【问题标题】:How can I carry a socket connection through multiple web pages?如何通过多个网页进行套接字连接?
【发布时间】:2014-09-29 03:01:16
【问题描述】:

我正在使用 node.js 和 socket.io 进行一些双向数据处理。我想要的是客户端浏览网站时的持久连接。 我使用的是标准

var socket;
socket = io.connect("http://localhost:port");
socket.on('connect', function(data){
    console.log("called connect");
    console.log(user_id);
    socket.emit('init', user_id);
});

这样我将 user_id 分配给该套接字,以后可以使用它有选择地向某些用户发送数据。 我首先在每个网页中插入了这个。 我注意到当我们移动到新页面甚至重新加载时都会调用套接字连接和断开连接。有没有办法避免这种情况并且只调用一次init

我尝试查看express.js,但找不到任何明显的解决方案。

【问题讨论】:

  • 你不能。您可以做的不是实际加载新页面,而是在同一页面上通过AJAX 加载新内容。如果需要,您还可以将套接字保留在当前页面上,并将所有内容加载到 iframe 中。
  • @Cristy,我可以在同一个端口上运行两个节点进程并通过不同的节点进程提供不同的页面吗?

标签: javascript node.js


【解决方案1】:

是的,它被称为single page application。这个想法是不重新加载页面或通过单独的 HTTP 请求发送页面。相反,使用 WebSockets 来简单地获取呈现用户想要看到的内容所需的数据。单页应用程序的主要优势在于您始终处于控制之中,并且整个浏览体验可以更加流畅。

有许多框架可以让单页应用程序的前端开发变得更容易。比较流行的可能是AngularEmber

当然,您不需要 WebSockets 来创建单页应用程序。你也可以use Ajax requests。然而,WebSockets 提供了其他优势。

Load-balancing WebSockets 可能比传统的 HTTP 或 Ajax 请求更棘手,但从您的问题猜测,这对您来说可能还不是问题。

【讨论】:

  • express.js 主页说我们也可以用它来构建多页面应用程序。这就是让我寻找解决方案的原因。需要重新考虑一下设计。
  • @NaveenSharma 介意分享链接吗?
【解决方案2】:

您可以尝试将 socket.id 存储在您的目录中,而不是在用户转到新页面时再次创建新的套接字,它只使用从您的目录中拉出创建的第一个套接字。

看看这个:how do I store socket resources from specific users with socket.io?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2019-06-05
    • 2016-09-10
    • 2010-09-23
    相关资源
    最近更新 更多