Я хотел бы создать приложение для мониторинга файлов на моем локальном компьютере через браузер. Я написал минималистичный пример, чтобы проиллюстрировать это. В моем примере ниже я называю эти «стандартные сообщения». Они запускаются на фронте нажатием кнопки и вызовом 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
Используйте Flask-Socketio, чтобы непрерывно отправлять сообщения ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение