2015-02-09 68 views
2

我正在尝试侦听用户的id命名空间上的新的socketIO连接。用户标识存储在烧瓶会话对象中。在SocketIO命名空间中使用烧瓶会话数据时出错

@socketio.on('connect', namespace=session['userId']) 
def test_connect(): 
    emit('newMessage') 

此代码生成以下错误:

raise RuntimeError('working outside of request context') 

我怎样才能获得上述连接监听请求上下文中运行?

谢谢!

回答

2

不幸的是,这不能完成,因为命名空间不是动态的,你必须使用静态字符串作为命名空间。

SocketIO中的命名空间的想法不是添加关于连接的信息,而是允许客户端打开多个单独的通道与服务器。命名空间允许SocketIO协议将所有这些通道复用为单个物理连接。

你想要做的是提供连接到服务器的输入参数。为此,只需将该值添加到您的有效载荷中:

@socketio.on('connect', namespace='/chat') 
def test_connect(): 
    userid = session['userId'] 
    # ...