Используйте Flask-Socketio, чтобы непрерывно отправлять сообщенияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Используйте Flask-Socketio, чтобы непрерывно отправлять сообщения

Сообщение Anonymous »

Я хотел бы создать приложение для мониторинга файлов на моем локальном компьютере через браузер. Я написал минималистичный пример, чтобы проиллюстрировать это. В моем примере ниже я называю эти «стандартные сообщения». Они запускаются на фронте нажатием кнопки и вызовом Fetch и обрабатываются в бэкэнд по маршруту .
Бэкэнд также должен отправлять сообщения каждые 5 секунд. Я называю эти «непрерывные сообщения» и пытаюсь отправить их с помощью Flask-Socketio. Они отправляются бэкэнд с Socketio start_background_task и Emit и получены с помощью Frontend с Socket.on () .
«Стандартные сообщения» работает нормально, если я прокомментирую часть сокета (и замените socketio.run app.run ). Но когда я расстроен, часть сокета, чтобы иметь «непрерывные сообщения», общение терпит неудачу. Бэкэнд не получает вызовы «стандартные сообщения», и Frondend не получает «непрерывные сообщения». Что мне нужно добавить, чтобы оба сообщения типа работали правильно?import time

from flask import Flask
from flask_cors import CORS
from flask_socketio import SocketIO

app = Flask(__name__)
CORS(app)

# Continuous messages ##########################################
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('connect')
def handle_connect():
print('Client connected')
socketio.start_background_task(send_continuous_messages)

def send_continuous_messages():
while True:
print("Backend sends a continuous message")
socketio.emit("continuous_message", {"data": "New continuous message"})
time.sleep(5)
################################################################

@app.route("/standard-message", methods=["GET"])
def generate_standard_message():
print("Backend sends a standard message")
return {"data": "New standard message"}

if __name__ == "__main__":
print("Starting app")
socketio.run(app, debug=True)

< /code>
frontend < /p>
const myButton = document.getElementById('my-button');
const BASE_URL = "http://localhost:5000";

// Continuous messages #########################################
const socket = io(BASE_URL);

socket.on('connect', () => {
console.log('WebSocket connected');
});

socket.on('disconnect', () => {
console.log('WebSocket disconnected');
});

socket.on('continuous_message', (data) => {
console.log('Frontend received a continuous message:', data);
});
// #############################################################

async function receiveStandardMessage() {
console.log('Frontend is requesting a standard message');
const response = await fetch(`${BASE_URL}/standard-message`);
const data = await response.json();
console.log('Frontend received a standard message:', data);
}

myButton.addEventListener('click', receiveStandardMessage);

< /code>
index.html





My app




Send standard message






Подробнее здесь: https://stackoverflow.com/questions/794 ... ntinuously
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»