重新制作websocket连接

时间:2015-07-25 03:49:28

标签: javascript python websocket flask-socketio

我有点担心我目前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多次出现?如果是,是否可以通过socket传递javascript变量?

我在flask-socketio上使用server

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

webSocket连接没有也无法从一个页面存活到下一个页面。当浏览器移动到新页面时,该原始页面中的任何webSocket连接都将关闭。

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

因此,使用webSocket连接是一种非常正常的方法,就是在页面加载时创建套接字。创建webSocket连接不是一个重量级的操作。初始连接webSocket比仅使用一个Ajax连接只需要更多的开销。当然,在连接之后,通过它发送数据非常有效(比发送新的Ajax请求发送相同的数据更有效)。

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

  

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

不,它不会导致问题。在页面加载时连接是使用webSockets的常用方法。

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

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

  

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

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

答案 1 :(得分:0)

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

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

祝你好运!