我有点担心我目前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
。
感谢您的帮助。
答案 0 :(得分:0)
webSocket连接没有也无法从一个页面存活到下一个页面。当浏览器移动到新页面时,该原始页面中的任何webSocket连接都将关闭。
因此,无法将webSocket连接从一个页面传递到替换它的页面。
因此,使用webSocket连接是一种非常正常的方法,就是在页面加载时创建套接字。创建webSocket连接不是一个重量级的操作。初始连接webSocket比仅使用一个Ajax连接只需要更多的开销。当然,在连接之后,通过它发送数据非常有效(比发送新的Ajax请求发送相同的数据更有效)。
现在,关于你的具体问题:
我想知道这是否会导致任何类型的问题?
不,它不会导致问题。在页面加载时连接是使用webSockets的常用方法。
我应该吗? 尝试在较早阶段连接,以便不进行连接 多次?
不,您无法将连接从一个页面传递到替换它的页面。
如果是这样,是否可以传递套接字变量 通过javascript?
它可以通过Javascript传递到同一页面中的其他函数,但不能传递给将替换此页面的页面。
答案 1 :(得分:0)
预计每个页面都会创建自己的套接字连接,实际上没有办法解决这个问题,正如@jfriend00在他的回答中所解释的那样。
虽然这不会导致任何问题,但使用WebSocket和Socket.IO的主要原因之一是服务器和客户端之间的低延迟和低开销交换。如果您的应用程序的设计需要经常加载新页面,那么这些好处将部分地受到延迟和开销的影响,这些延迟和开销必须经常丢弃现有连接,以便在下一页加载时重新建立它。我的建议是,您评估single-page application模型是否适合您的应用程序。使用此模型,整个应用程序加载初始页面,然后不需要重定向到其他页面,从而允许您在应用程序的整个生命周期中保持Socket.IO连接。
祝你好运!