Клиент Javascript не будет постоянно слушать с Flask-SocketIO
Я изучаю веб-сокеты с Flask-SocketIO. Цель состоит в том, чтобы мой 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 ответ
Это блокирует в потоке. Попробуй использовать 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)
Пожалуйста, не забудьте поместить патч обезьяны в верхней части вашего файла.:)