Tengo un servidor WebSocket que recibe flujos de mensajes de una fuente MQTT y el mensaje se envía a un servidor localhost (puerto 8080). El mensaje recibido es un flujo de números aleatorios.
Código Python para el servidor Websocket:
# Acts as localhost server import websockets import asyncio import requests import json PORT = 3001 print("Server listening on Port " + str(PORT)) async def echo(websocket, path): print("A client just connected") try: async for message in websocket: hello ="test" text = message print("Received message from client: " + message) payload = {'value':message} r = requests.post('http://localhost:8080', params=payload) print(r) await websocket.send("Pong: " + text + message + hello) except websockets.exceptions.ConnectionClosed as e: print("A client just disconnected") start_server = websockets.serve(echo, "localhost", PORT) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever()Ejemplo de flujo de mensajes impreso desde el registro:
A client just connected Received message from client: 35 <Response [200]> A client just connected Received message from client: 38 <Response [200]> A client just connected Received message from client: 38 <Response [200]> A client just connected Received message from client: 38 <Response [200]> A client just connected Received message from client: 33 <Response [200]>Luego, intento leer los números de 'http://localhost:8080' desde mi aplicación React frontend usando una solicitud GET usando Express y Axios. Sin embargo, no funcionó y probablemente porque no tengo mucha experiencia con los paquetes API de JS. . Entonces, ¿cómo leo los mensajes de mi aplicación React?
Podrías hacer esto usando npm i socket.io-client
const socket = io("http://localhost:8080"); // connects to server address socket.on('connect', () => { console.log('connected to server'); }); socket.emit("Pong: ", "hello") // this is to send /* this is to listen */ socket.on("value-to-listen-too", (params) => { ... }En su aplicación de reacción, pondría el socket en un contexto. Luego páselo donde sea necesario. Luego, en el archivo donde usaría socket, usaría un gancho de efecto como ese
useEffect(() => { socket.on("read-message", (message) => { someFunc(message) }) return () => { // turn off sockets after exiting app / page socket.off("read-message") }; }, [socket]);