Ожидание сервера во время flask приложения socketIO script - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать задержку в сценарии на стороне сервера приложения flask для веб-сокетов.

В конечном счете, я хочу, чтобы сервер обрабатывал много одновременных запросов и мог отправлять обратно клиенту два пакета с фиксированным интервалом времени между

Когда я использую time.sleep(x) между двумя flask_socketio.emit инструкциями клиент получает события генерации сокета вместе после завершения сна.

Как мне достичь Emit X; wait Y seconds; emit Z в приложении python flask?

Выдержка кода на стороне сервера:

from flask import Flask, request
from flask_socketio import SocketIO, join_room, emit
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on('ping')

def ping(appState):
    """send 2 pings, between a time interval"""
    room = appState["sessionID"]
    emit('serverPingResponse', {'room': room, 'msg':"Ping Received by Server"})
    time.sleep(5)
    emit('serverPingResponse', {'room': room, 'msg':"2nd time-delayed ping"})
    return

Выдержка кода на стороне клиента:

var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on("serverPingResponse", function(msg){
      // listen to server ping and print the message to console
      let d = new Date();
      console.log("ping received at "+d.toLocaleTimeString(), msg)
    });

Вывод на консоль

pinging server...
ping received at 10:43:14 AM 
Object { room: "wvdhj01f3p", msg: "Ping Received by Server" }
ping received at 10:43:14 AM 
Object { room: "wvdhj01f3p", msg: "2nd time-delayed ping" }

Требуемый выход будет для первого пинга, который будет получен в 10:43:09, а второй в 10:43:14

1 Ответ

1 голос
/ 22 марта 2020

Вы используете функцию time.sleep(), которая, как я предполагаю, блокирует ваш сервер. Попробуйте вместо этого использовать socketio.sleep(), что сделает совместный сон совместимым с используемой платформой asyn c (eventlet, gevent).

...