我想使用SocketIO在服务器上发生某个事件时广播消息,现在我使用这个代码
我在启动服务器时调用gevent.spawn(loop_send_queued_messages, server)
当客户端向“/emit”发送数据时,一切正常:
broadcast
的broadcasting
消息broadcast_msg
的消息但是,如果在服务器的另一部分,我导入broadcast
函数并从某个端点使用它(例如,在用户发送了一个文件之后),我只看到来自调用broadcast
的第一条broadcasting
消息,但似乎该消息没有正确地添加到队列中,因为{
有人能告诉我在Flask中使用SocketIO从服务器代码的任何位置进行广播的最佳方法吗?在
[编辑]考虑到下面的评论,我有这个
broadcasting newdatasetAvailable features 4363892432 scripts.socket_routes
127.0.0.1 - - [2013-12-11 15:56:07] "POST /datastore/features HTTP/1.1" 200 115 0.003130
broadcasting msg refreshData 4363648208 socket_routes
127.0.0.1 - - [2013-12-11 15:56:07] "POST /emit HTTP/1.1" 200 115 0.000540
broadcast_msg msg (u'refreshData',)
一个是scripts.socket_routes
,另一个是socket_routes
/emit
端点与websocket_queue
在同一个文件中定义,POST
到{broadcast
方法,并按如下方式导入:
结构为:
scripts/
__init__.py
socket_routes.py # where websocket_queue and broadcast are defined
dataset_routes.py # where broadcast is imported
对于如何导入模块,这可能是一个微妙的问题。一、 你可以用两个不同的模块名加载模块两次,却没有意识到。在
在broadcast()中修改打印,如下所示:
确保从服务器代码调用时显示的id和模块名称与客户端发送数据时显示的id和模块名称相同。在
如果信息不匹配,那么这就是可能的问题。它通常是由相对进口(这是邪恶的)引起的。切换到absolute imports任何地方,这可能会修复它。在
使用Python2.6或更早版本时,我在每个模块的顶部添加
from __future__ import absolute_import
,以防止此类问题。在相关问题 更多 >
编程相关推荐