Verwenden Sie Flask-Socketio, um Nachrichten kontinuierlich zu sendenPython

Python-Programme
Anonymous
 Verwenden Sie Flask-Socketio, um Nachrichten kontinuierlich zu senden

Post by Anonymous »

Ich möchte eine Anwendung erstellen, um Dateien auf meinem lokalen Computer über den Browser zu überwachen. Ich habe ein minimalistisches Beispiel geschrieben, um dies zu veranschaulichen. In meinem Beispiel unten nenne ich diese "Standardmeldungen". Sie werden in der Frontend durch eine Schaltfläche Klick und einen Abruf Anruf ausgelöst und im Backend über eine Route .
Das Backend sollte auch alle 5 Sekunden Nachrichten senden. Ich nenne diese "kontinuierlichen Nachrichten" und versuche sie mit Flask-Socketio zu senden. Sie werden vom Backend mit Socketio start_background_task und emit gesendet und von der Frontend mit Socket.on () . Aber wenn ich den Socketio -Teil für "kontinuierliche Nachrichten" übernehme, schlägt die Kommunikation fehl. Das Backend empfängt die Anrufe "Standardnachrichten" nicht und das Frontend erhält nicht die "kontinuierlichen Nachrichten". Was muss ich hinzufügen, damit beide Nachrichten korrekt funktionieren?

Code: Select all

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




Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post