Javascript客户端不会继续使用Flask-SocketIO

时间:2018-04-05 13:10:52

标签: javascript flask websocket flask-socketio

我正在使用Flask-SocketIO学习websockets。目标是让我的div每秒连续填充一个随机数。当我运行下面的代码时,只显示最后一个数字。但是在控制台中我看到所有都是在同一时间到达。

<script type="text/javascript" src="//code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">

var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

socket.on('pony_update', function(msg){
    console.log("pony update");
    console.log(msg);
    $('#ponies').html(msg.data);
});

更新此div

<div id="ponies"></div>

“控制器”方法是

@socketio.on('the_ponies', namespace='/test')
def run_numbers(message):
    for i in range(5):
        time.sleep(1)
        x = random.random()
        emit('pony_update', {'data': x}, broadcast=True)

1 个答案:

答案 0 :(得分:2)

它在线程中阻塞。尝试将start_background_task与gevent monkey_patch

一起使用
@socketio.on('pony_update', namespace='/chat')
def run_numbers(message):
    @copy_current_request_context
    def back_work():
        print('start')
        for i in range(5):
            time.sleep(1)
            x = random.random()
            print(x)
            emit('my response', {'data': x}, broadcast=True)
    socketio.start_background_task(target=back_work)

请不要忘记将猴子补丁放在文件的顶部。 :)

相关问题