代码之家  ›  专栏  ›  技术社区  ›  user2268507

重新制作websocket连接

  •  2
  • user2268507  · 技术社区  · 10 年前

    我有点担心我目前的工作方式 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 然后移到另一页。运行第二页后,我再次返回第一页 插座 上面的代码再次运行。

    我想知道这会不会引起什么问题?我应该试着 connect 在早期阶段 connection 不是多次制作吗?如果是,是否可以通过 插座 变量通过 javascript ?

    我正在使用 flask-socketio server .

    谢谢你的帮助。

    2 回复  |  直到 10 年前
        1
  •  0
  •   jfriend00    10 年前

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

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

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

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

    我想知道这会不会引起什么问题?

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

    我应该 尝试在较早的阶段进行连接,以便不进行连接 多次?

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

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

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

        2
  •  0
  •   Miguel Grinberg    10 年前

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

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

    祝你好运