gpt4 book ai didi

javascript - Socket.IO 延迟发送

转载 作者:行者123 更新时间:2023-12-03 22:53:09 26 4
gpt4 key购买 nike

我创建了一个 Flask-SocketIO python 服务器,它应该记录来自 socket.io JavaScript 客户端的数据。

服务器:

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('connect')
def handle_connect():
print 'Connected'

@socketio.on('disconnect')
def handle_disconnect():
print 'Disconnected'

@socketio.on('start')
def handle_start():
print 'Start'

@socketio.on('log')
def handle_log(data):
print('Log: ' + data)

if __name__ == '__main__':
socketio.run(app)

客户:

<script src="socket.io.js"></script>

<script>
function sleep(ms) {
var unixtime_ms = new Date().getTime();
while(new Date().getTime() < unixtime_ms + ms) {}
}

var socket = io.connect('http://127.0.0.1:5000', {'forceNew':true });
socket.on('connect', function()
{
socket.emit('start');
socket.emit('log', '1');
socket.emit('log', '2');
socket.emit('log', '3');

sleep(3000)
});
</script>

而不是看到服务器立即打印“Start”、“Log: 1”、“Log: 2”和“Log: 3”。

服务器只打印“开始”,3 秒后一次性打印所有其他消息。

这是一个问题,因为我需要实时日志记录,并且无法在执行结束时一次性接收所有日志。

知道为什么会这样吗?实现这个简单日志服务器的正确方法是什么?

最佳答案

您正在使用的 sleep() 函数对 JavaScript 来说真的很糟糕,因为您并不是真的在 sleep ,而是在忙着等待。这意味着 CPU 在这 3 秒内处于忙碌状态,因此需要 CPU 运行的其他任务会延迟。

如果你需要等待 3 秒再做其他事情,我建议你使用一个定时器对象:

window.setTimeout(function() { alert('do something!'); }, 3000);

如果您使用超时休眠,您将在等待时间内释放 CPU,这允许 JS 调度程序将它提供给其他需要它的任务,例如那些支持 Socket.IO 发出的任务。

希望这对您有所帮助!

关于javascript - Socket.IO 延迟发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com