【问题标题】:python socket-io emit() doesn't send time until after executionpython socket-io emit() 直到执行后才发送时间
【发布时间】:2021-09-21 03:11:02
【问题描述】:

使用 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() 函数每秒打印数据(计数)?

【问题讨论】:

    标签: javascript python flask websocket python-socketio


    【解决方案1】:

    您已在连接事件处理程序中添加循环,用于接受或拒绝连接。在您从此处理程序返回之前,不会完全建立 Socket.IO 连接。

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

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2017-10-23
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      相关资源
      最近更新 更多