【问题标题】:Remaking websocket connections重建 websocket 连接
【发布时间】:2015-07-25 03:49:28
【问题描述】:

我有点担心我目前将connections 转换为websocket 的方式。

在我的app 的一页中,我有:

var socket = io.connect('http://my.ip.address' + ':' + '80' + namespace);
socket.on('connect', function () {
            socket.emit('join', { room: 'venue_' + venue_id });
        });

在这之后我receive一些data通过socket然后移动到另一个页面。在第二页运行后,我再次返回到上面的socket 代码再次运行的第一页。

我想知道这是否会导致任何类型的问题?我是否应该在更早的阶段尝试connect,这样connection 就不会被多次制作?如果是这样,是否可以通过javascript 传递socket 变量?

我在server 上使用flask-socketio

感谢您的帮助。

【问题讨论】:

标签: javascript python websocket flask-socketio


【解决方案1】:

webSocket 连接不会也无法从一页到下一页。当浏览器移动到新页面时,该原始页面中的所有 webSocket 连接都将关闭。

因此,没有办法将 webSocket 连接从一个页面传递到替换它的页面。

因此,使用 webSocket 连接的一种完全正常的方式是在页面加载时创建套接字。创建 webSocket 连接并不是一项繁重的操作。与一个 Ajax 连接相比,最初连接 webSocket 的开销仅明显增加。当然,在它连接后,通过它发送数据是非常高效的(比发出新的 Ajax 请求发送相同的数据效率更高)。

现在,至于您的具体问题:

我想知道这是否会导致任何类型的问题?

不,它不会引起问题。每当页面加载时进行连接是使用 webSockets 的一种正常方式。

我应该 尝试在更早的阶段连接,这样就不会建立连接 多次?

不,您不能将连接从一个页面传递到替换它的页面。

如果是这样,是否可以传递套接字变量 通过javascript?

它可以通过 Javascript 传递给同一页面内的其他函数,但不能传递给将替换此函数的页面。

【讨论】:

    【解决方案2】:

    预计每个页面都会创建自己的套接字连接,实际上没有办法解决这个问题,正如@jfriend00 在他的回答中解释的那样。

    虽然这不会导致任何问题,但使用 WebSocket 和 Socket.IO 的主要原因之一是服务器和客户端之间的低延迟和低开销交换。如果您的应用程序的设计方式需要经常加载新页面,那么这些好处将被延迟和开销部分掩盖,因为必须经常丢弃现有连接才能在下一页加载时重新建立它。我的建议是您评估single-page application 模型是否可能是您的应用程序的更好选择。使用此模型,整个应用程序会加载初始页面,然后不需要重定向到其他页面,从而允许您在应用程序的整个生命周期中保持 Socket.IO 连接。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多