我正在使用Flask-SocketIO将消息从基于ZeroMQ的系统联合到使用Web套接字的浏览器客户端。这本来应该很薄。
但是,我发现即使将连接(通过浏览器)升级为Web套接字,在socketio中发出的消息实际上并不会通过电线传递,除非浏览器每25秒发送一次ping。
通过将socketio ping_interval
参数修改为1,可以有效地回到轮询。下面的屏幕截图显示了25秒的时间间隔,并且只有在轮询后才以序列号到达消息。
class Receiver(threading.Thread):
...
def onMessageReceived(msg):
socketio.emit('msgtype', msg.toJson())
app = flask.Flask(__name__, root_path=root + "/dashboard/")
socketio = SocketIO(app, logger=log, async_mode=async_mode, ping_interval=1.5)
thread = socketio.start_background_task(receiver)
socketio.run(app, host='localhost', port=8000)
flask-socketio / engineio为什么不立即发出消息?