python socket-io emit() 直到执行后才发送时间

python socket-io emit() doesn't send time until after execution

使用 python socketio 包,我创建了一个计时器,它在客户端连接到我的服务器时启动。

服务器端代码:

import socketio

sio = socketio.Server()
app = socketio.WSGIApp(sio, static_files={
    '/': './public/'
})


@sio.event
def connect(sid, environ):
    count = 10
    
    while count > 0:
        sio.emit('timer_count', count)
        sio.sleep(1)
        count -= 1

HTML代码参考(index.html):

<!doctype html>
<html>
    <head>
        <title>Timer</title>
    </head>
    <body>
        <h1>Timer Build</h1>
        <p1 id="counter"></p1>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.1.2/socket.io.min.js"></script>
        <script src="/index.js"></script>
    </body>
</html>

客户端JS代码(index.js):

const sio = io();

sio.on('timer_count', function(count) {
    console.log(count);
    var s = document.getElementById("counter");
    s.innerHTML = count;
});

但是,我得到的行为是数据不会发送到客户端,直到它显示服务器端代码已完成执行(即一次打印全部计数)。我怎样才能让它以真正的定时器方式运行,其中 console.log() 函数每秒打印数据(计数)?

您已在连接事件处理程序中添加循环,用于接受或拒绝连接。 Socket.IO 连接不会完全建立,直到你从这个处理程序 return。

将您的循环移动到一个单独的事件,该事件在连接处理程序 return 之后执行并接受连接。