Используйте 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
import logging

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

app = Flask(__name__)
CORS(app)

logging.basicConfig(level=logging.DEBUG)

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

@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";

localStorage.debug = '*';

// 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




< /code>
журналы сервера < /p>
Server initialized for eventlet.
INFO:engineio.server:Server initialized for eventlet.
Starting app
INFO:werkzeug: * Restarting with stat
Server initialized for eventlet.
INFO:engineio.server:Server initialized for eventlet.
Starting app
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 141-243-050
(6318) wsgi starting up on http://127.0.0.1:5000
(6318) accepted ('127.0.0.1', 52009)
GotWW8oC3BEz4J3jAAAA: Sending packet OPEN data {'sid': 'GotWW8oC3BEz4J3jAAAA', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000, 'maxPayload': 1000000}
INFO:engineio.server:GotWW8oC3BEz4J3jAAAA: Sending packet OPEN data {'sid': 'GotWW8oC3BEz4J3jAAAA', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000, 'maxPayload': 1000000}
127.0.0.1 - - [06/Mar/2025 17:40:49] "GET /socket.io/?EIO=4&transport=polling&t=PLiLCOB HTTP/1.1" 200 335 0.001486
GotWW8oC3BEz4J3jAAAA: Received packet MESSAGE data 0
INFO:engineio.server:GotWW8oC3BEz4J3jAAAA: Received packet MESSAGE data 0
Client connected
GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 0{"sid":"w_DlD83bH5OBQRbiAAAB"}
INFO:engineio.server:GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 0{"sid":"w_DlD83bH5OBQRbiAAAB"}
127.0.0.1 - - [06/Mar/2025 17:40:50] "POST /socket.io/?EIO=4&transport=polling&t=PLiLCOy&sid=GotWW8oC3BEz4J3jAAAA HTTP/1.1" 200 202 0.003777
Backend sends a continuous message
emitting event "continuous_message" to all [/]
INFO:socketio.server:emitting event "continuous_message" to all [/]
GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 2["continuous_message",{"data":"New continuous message"}]
INFO:engineio.server:GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 2["continuous_message",{"data":"New continuous message"}]
Backend sends a continuous message
emitting event "continuous_message" to all [/]
INFO:socketio.server:emitting event "continuous_message" to all [/]
GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 2["continuous_message",{"data":"New continuous message"}]
INFO:engineio.server:GotWW8oC3BEz4J3jAAAA: Sending packet MESSAGE data 2["continuous_message",{"data":"New continuous message"}]
< /code>
Клиентские журналы < /p>
Frontend is requesting a standard message
Firefox can’t establish a connection to the server at ws://localhost:5000/socket.io/?EIO=4&transport=websocket&sid=GotWW8oC3BEz4J3jAAAA.
WebSocket disconnected


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

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

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

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

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

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

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