在 SocketIO 命名空间中使用烧瓶会话数据时出错
Posted
技术标签:
【中文标题】在 SocketIO 命名空间中使用烧瓶会话数据时出错【英文标题】:Error using flask session data in SocketIO namespace 【发布时间】:2015-04-09 18:46:14 【问题描述】:我正在尝试在用户的 id 命名空间上监听新的 socketIO 连接。用户 ID 存储在烧瓶会话对象中。
@socketio.on('connect', namespace=session['userId'])
def test_connect():
emit('newMessage')
此代码产生以下错误:
raise RuntimeError('working outside of request context')
如何让上述连接监听器在请求上下文中运行?
谢谢!
【问题讨论】:
【参考方案1】:很遗憾,这无法做到,因为命名空间不是动态的,您必须使用静态字符串作为命名空间。
SocketIO 中命名空间的想法不是添加有关连接的信息,而是允许客户端与服务器打开多个单独的通道。命名空间允许 SocketIO 协议将所有这些通道多路复用到一个物理连接中。
您要做的是向服务器提供连接的输入参数。为此,只需将值添加到您的有效负载:
@socketio.on('connect', namespace='/chat')
def test_connect():
userid = session['userId']
# ...
【讨论】:
以上是关于在 SocketIO 命名空间中使用烧瓶会话数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何访问使用 websockets 发送的烧瓶中的 formData?Flask-SocketIO