我创建了一个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>
而不是看到服务器打印&#34;开始&#34;,&#34;日志:1&#34;,&#34;日志:2&#34;和&#34;记录:3&#34;立即
服务器只打印&#34;开始&#34;并在3秒后一次打印所有其他消息。
这是一个问题,因为我需要实时日志记录,并且无法在执行结束时一次性接收所有日志。
知道为什么会这样,以及实现这个简单日志服务器的正确方法是什么?
答案 0 :(得分:-1)
你正在使用的#include "AddDialog.h"
AddDialog::AddDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
}
函数对于JavaScript来说非常糟糕,因为你并没有真正沉睡,而是忙着等待。这意味着CPU在这3秒内处于工作状态,因此需要CPU运行的其他任务会延迟。
如果您在做其他事情之前需要等待3秒钟,我建议您使用计时器对象:
sleep()
如果你使用超时睡眠,你将在等待时间内释放CPU,这允许JS调度程序将其提供给需要它的其他任务,例如那些支持Socket.IO发出的任务。
希望这有帮助!