2014-07-16 50 views
0

我正在使用Flask-socketio(http://flask-socketio.readthedocs.org/en/latest/)。Flask-socketio,将事件发送到另一个命名空间

在events.py使用这个时候我目前得到一个

KeyError: '/local' 

。注意不同的命名空间:

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

使用烧瓶socketio是有可能发出一个单独的命名空间到事件发生呢?文档似乎暗示了这一点,但我无法解决为什么我不断收到KeyError。

编辑:谢谢@Miguel你的建议的回答,我再次尝试(很长一段时间,从项目后离开),但仍然获得了KeyError异常与下面:

@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') 

当我运行应用程序,我请参阅打印的“本地客户端已连接”。只有这样我才允许客户访问/照片路线。我看到'客户端连接'打印出来,然后当然是关键错误。

我已将flask-socketio升级到0.4.2。

最佳

安德鲁

+0

你有没有找到任何解决方案,或想出在这种情况下做什么? 谢谢。 –

+0

我想我最终在node.js中构建了整个事物!所以我不害怕。 – roowilliams

+0

你是如何在nodejs socketio中实现它的?上面的例子是否奏效? –

回答

2

你需要有第二个命名空间的至少一个处理器。例如:

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

然后烧瓶SocketIO会了解/local,将能够发出消息给它。

+0

嗨@Miguel,我试过你的建议,但我仍然在'本地'上得到一个KeyError。第二个名字空间的处理程序在我的原始代码之前被声明,并且在它之前被调用,即。 local_client_connect()发生在client_connect()之前。 – roowilliams

相关问题