3

我正在使用 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。

最好的

安德鲁

4

2 回答 2

3

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

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

然后 Flask-SocketIO 将知道/local并能够向它发出消息。

于 2014-07-16T17:05:57.067 回答
3

我有同样的问题并像这样解决了。

@socketio.on('connect', namespace='/photo')
def client_connect():
    socketio.emit('event', { 'type': 'client_connect' }, namespace='/local')
于 2019-06-03T19:11:41.810 回答