Socket.IO发送延迟发送

时间:2017-10-30 19:22:57

标签: javascript socket.io flask-socketio emit

我创建了一个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秒后一次打印所有其他消息。

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

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

1 个答案:

答案 0 :(得分:-1)

你正在使用的#include "AddDialog.h" AddDialog::AddDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); } 函数对于JavaScript来说非常糟糕,因为你并没有真正沉睡,而是忙着等待。这意味着CPU在这3秒内处于工作状态,因此需要CPU运行的其他任务会延迟。

如果您在做其他事情之前需要等待3秒钟,我建议您使用计时器对象:

sleep()

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

希望这有帮助!