重制websocket连接



我有点担心我目前制作connectionswebsocket的方式。

在我的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

谢谢你的帮助。

webSocket连接不能从一个页面存活到下一个页面。当浏览器移动到一个新页面时,原始页面中的所有webSocket连接都将关闭。

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

因此,使用webSocket连接的一种完全正常的方式是在页面加载时创建socket。创建webSocket连接并不是一个繁重的操作。初始连接webSocket只比一个Ajax连接稍微多一点开销。当然,在它连接之后,通过它发送数据是非常有效的(比发出一个新的Ajax请求来发送相同的数据更有效)。

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

我想知道这是否会引起任何问题?

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

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

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

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

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

期望每个页面创建自己的套接字连接,实际上没有办法,正如@jfriend00在他的回答中解释的那样。

虽然这不会引起任何问题,但使用WebSocket和Socket的主要原因之一。IO是在服务器和客户端之间进行低延迟和低开销的交换。如果您的应用程序被设计成需要经常加载新页面的方式,那么这些好处将部分地被延迟和开销所掩盖,因为必须经常丢弃现有连接,以便在下一个页面加载时重新建立它。我的建议是,您应该评估一下单页面应用程序模型对于您的应用程序来说是否是一个更好的选择。使用此模型,整个应用程序将加载初始页面,然后不需要重定向到其他页面,从而允许您保留您的Socket。在应用程序的整个生命周期内的IO连接。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新