Flask socketIO 发出一系列事件

Flask socketIO emit series of events

我希望服务器在建立连接后向客户端 (React) 发出一系列事件,我试过:

@socketio.on('connect')
def test_connect():
    for i in range(10):
        emit('my response', {'data': 'Connected ' + str(i)})
        time_module.sleep(2)

但事件同时显示在 Web 浏览器控制台中,就像它们同时到达一样,在反应中我使用:

useEffect(() => {
    const socket = socketIOClient(ENDPOINT);

    socket.on('my response', function (data) {
      console.log('my response: ', data.data);
    })
})

您的服务器代码中存在两个潜在问题。

首先,你的例子中的time_module是什么?我怀疑你正在做的是阻塞性睡眠。相反,我建议你好好睡觉 socketio.sleep(2).

第二个问题是您在 connect 事件处理程序中执行此操作。 Socket.IO 服务器会一直等到你 return 从连接处理程序来决定是否接受或拒绝客户端,所以通常你不希望这个处理程序花费很长时间才能 运行,因为在您 return 之前,连接尚未完全建立。我建议您改为将此逻辑移至后台函数。

以下代码解决了这两个问题:

def initial_events():
    for i in range(10):
        emit('my response', {'data': 'Connected ' + str(i)})
        socketio.sleep(2)

@socketio.on('connect')
def test_connect():
    socketio.start_background_task(initial_events)