Как мое приложение Flask может отправлять сообщения Websocket на асинхронную HTML-страницу?Python

Программы на Python
Anonymous
Как мое приложение Flask может отправлять сообщения Websocket на асинхронную HTML-страницу?

Сообщение Anonymous »

У меня возникли проблемы с приложением Flask, использующим сокетIO.
У меня есть внешнее устройство по IP 10.0.0.144, отправляющее сообщения веб-сокета моему приложению по адресу 10.0.0.218:8089. . Я вижу входящие сообщения веб-сокета в консоли PyCharm.
10.0.0.144 - - [31/Jul/2024 11:21:43] code 400, message Bad request syntax ('{"ts":1722439304,"dio":{"dio1":{"in":true},"dio2":{"in":true},"dio3":{"label":"Link","in":true},"dio4":{"in":true}},"ain":{"ain1":{"voltage":12},"ain2":{"voltage":2},"ain3":{"voltage":10},"ain4":{"voltage":0}}}')

10.0.0.144 - - [31/Jul/2024 11:21:43] "{"ts":1722439304,"dio":{"dio1":{"in":true},"dio2":{"in":true},"dio3":{"label":"Link","in":true},"dio4":{"in":true}},"ain":{"ain1":{"voltage":12},"ain2":{"voltage":2},"ain3":{"voltage":10},"ain4":{"voltage":0}}}" HTTPStatus.BAD_REQUEST

Кроме того, я пытаюсь отправить эти сообщения на асинхронную HTML-страницу, но, насколько я вижу, сообщения не передаются.
Код Flask:
Я хотел, чтобы он обрабатывал входящие сообщения, а затем отправлял их на асинхронную HTML-страницу. Сообщения обрабатываются, и они сохраняются в объекте списка. На самом деле меня беспокоят только сообщения, исходящие от 10.0.0.144.
Честно говоря, я даже не уверен, что это лучший подход с точки зрения проекта, но я никогда ничего не делал это было продвинуто раньше.

from flask_socketio import SocketIO, emit
from flask import Flask, render_template, url_for, copy_current_request_context
from random import random
from time import sleep
from threading import Thread, Event

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True

#turn the flask app into a socketio app
socketio = SocketIO(app, async_mode=None, logger=True, engineio_logger=True)

thread = Thread()
thread_stop_event = Event()

messages = []

def get_values():
while True:
message = socketio.on(1024)
while not thread_stop_event.is_set():
messages.append(message)
# Send the message to all connected clients
socketio.emit('new_message', {'message': message})
print(message)
socketio.sleep(2)

@app.route('/')
def index():
#only by sending this page first will the client be connected to the socketio instance
return render_template('index.html')

@socketio.on('connect', namespace='/test')
def test_connect():
# need visibility of the global thread object
global thread
print('Client connected')

#Start the function to emit msgs thread only if the thread has not been started before.
if not thread.is_alive():
print("Starting Thread")
thread = socketio.start_background_task(get_values)

@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print('Client disconnected')

# Start the Flask app with SocketIO
socketio.run(app, host='10.0.0.218', port=8089, allow_unsafe_werkzeug=True)

JS-код:
$(document).ready(function(){
//connect to the socket server.
var socket = io.connect('http://10.0.0.218' + document.domain + ':' + location.port + '/test')
var messages_received = [];

//receive details from server
socket.on('new_message', function(msg) {
console.log("Received msg" + msg.number);
//maintain a list of ten msgs
if (messages_received.length >= 10){
messages_received.shift()
}
messages_received.push(msg.number);
messages_string = '';
for (var i = 0; i < messages_received.length; i++){
messages_string = messages_string + '
' + messages_received.toString() + '
';
}
$('#log').html(messages_string);
});

});

Вот пример вывода консоли:
\`\* Running on http://10.0.0.218:8089
Press CTRL+C to quit

* Restarting with stat
Server initialized for threading.
Werkzeug appears to be used in a production deployment. Consider switching to a production web server instead.

* Debugger is active!

* Debugger PIN: 123-630-169
RMoYImBp0_FvWs_lAAAA: Sending packet OPEN data {'sid': 'RMoYImBp0_FvWs_lAAAA', 'upgrades': \['websocket'\], 'pingTimeout': 20000, 'pingInterval': 25000}
10.0.0.218 - - \[31/Jul/2024 11:54:54\] "GET /socket.io/?EIO=4&transport=polling&t=P49W5nO HTTP/1.1" 200 -
RMoYImBp0_FvWs_lAAAA: Received packet MESSAGE data 0/test,
RMoYImBp0_FvWs_lAAAA: Received request to upgrade to websocket
emitting event "new_message" to all \[/\]
RMoYImBp0_FvWs_lAAAA: Sending packet MESSAGE data 0/test,{"sid":"Fzb-QYWF3SFFBr4EAAAB"}
10.0.0.218 - - \[31/Jul/2024 11:54:54\] "POST /socket.io/?EIO=4&transport=polling&t=P49W64r&sid=RMoYImBp0_FvWs_lAAAA HTTP/1.1" 200 -
10.0.0.218 - - \[31/Jul/2024 11:54:54\] "GET /socket.io/?EIO=4&transport=polling&t=P49W64s&sid=RMoYImBp0_FvWs_lAAAA HTTP/1.1" 200 -
RMoYImBp0_FvWs_lAAAA: Upgrade to websocket successful
Client connected
Starting Thread
emitting event "new_message" to all \[/\]
emitting event "new_message" to all \[/\]
10.0.0.144 - - \[31/Jul/2024 11:54:59\] code 400, message Bad request syntax ('{"ts":1722441301,"dio":{"dio1":{"in":true},"dio2":{"in":true},"dio3":{"label":"Link","in":true},"dio4":{"in":true}},"ain":{"ain1":{"voltage":12},"ain2":{"voltage":2},"ain3":{"voltage":10},"ain4":{"voltage":0}}}')
10.0.0.144 - - \[31/Jul/2024 11:54:59\] "{"ts":1722441301,"dio":{"dio1":{"in":true},"dio2":{"in":true},"dio3":{"label":"Link","in":true},"dio4":{"in":true}},"ain":{"ain1":{"voltage":12},"ain2":{"voltage":2},"ain3":{"voltage":10},"ain4":{"voltage":0}}}" HTTPStatus.BAD_REQUEST -
emitting event "new_message" to all \[/\]
emitting event "new_message" to all \[/\]
emitting event "new_message" to all \[/\]
10.0.0.218 - - \[31/Jul/2024 11:55:05\] "GET /socket.io/?EIO=4&transport=websocket&sid=RMoYImBp0_FvWs_lAAAA HTTP/1.1" 200 -
10.0.0.218 - - \[31/Jul/2024 11:55:05\] "GET / HTTP/1.1" 200 -
Client disconnected
10.0.0.218 - - \[31/Jul/2024 11:55:05\] "GET /static/application.js HTTP/1.1" 304 -\`

HTML-страница:













Asynchronous Flask Communication
Websocket Messages from field devices.






Asynchronous page updates will appear here:
messages:









Подробнее здесь: https://stackoverflow.com/questions/788 ... s-html-pag

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