Flask-socketio,向另一个命名空间发出一个事件

时间:2014-07-16 11:14:05

标签: python flask socket.io gevent-socketio

我正在使用Flask-socketio(http://flask-socketio.readthedocs.org/en/latest/)。

我目前正在

KeyError: '/local'

在events.py中使用它时。请注意不同的名称空间:

@socketio.on('connect', namespace='/photo')
def client_connect():
    emit('event', { 'type': 'client_connect' }, namespace='/local')

使用Flask-socketio是否可以向发生事件的单独命名空间发出?文档似乎建议如此,但我无法解释为什么我一直得到KeyError。

编辑:感谢@Miguel提出的答案,我已经再次尝试(经过很长一段时间远离项目),但仍然得到了以下内容:

@socketio.on('connect', namespace='/local')
def local_client_connect():
    print ('Local client connected.')

@socketio.on('connect', namespace='/photo')
def client_connect():
    print ('Client connected.')
    send('client_connect', namespace='/local')

当我运行应用程序时,我看到打印的“本地客户端已连接”。然后才允许客户端访问/ photo路由。我看到“客户连接”已打印,当然还有关键错误。

我已将flask-socketio升级到0.4.2。

最佳

安德鲁

2 个答案:

答案 0 :(得分:2)

您需要在第二个命名空间上至少有一个处理程序。例如:

@socketio.on('connect', namespace='/local')
def local_client_connect():
    pass

然后Flask-SocketIO将了解/local并能够向其发送消息。

答案 1 :(得分:0)

我遇到了同样的问题,并像这样解决了。

@socketio.on('connect', namespace='/photo')
def client_connect():
    socketio.emit('event', { 'type': 'client_connect' }, namespace='/local')