首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.IO发送延迟

Socket.IO发送延迟
EN

Stack Overflow用户
提问于 2017-10-31 03:22:57
回答 1查看 2K关注 0票数 3

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

服务器:

代码语言: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)

客户端:

代码语言:javascript
复制
<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秒后打印所有其他消息在一次拍摄。

这是一个问题,因为我需要实时日志记录,无法负担在执行结束时在一次拍摄中接收所有日志。

你知道为什么会发生这种情况吗?实现这个简单的日志服务器的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-10-31 08:54:35

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

如果你需要在做其他事情之前等待3秒,我建议你使用timer对象:

代码语言:javascript
复制
window.setTimeout(function() { alert('do something!'); }, 3000);

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

希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47022784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档