Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

331
Visualizações
Python: envía datos cada 10 segundos a través de socket.io

Tengo una pregunta muy similar a esta: enviar datos cada 10 segundos a través de socket.io

Pero: Mi servidor está escrito en Python, el cliente está en JavaScript

La meta:

  • Los clientes se conectan al servidor a través de socket.io
  • Los clientes reciben ping de mensajes push del servidor cada n segundos
  • Cuando un cliente envía un mensaje ping , el servidor transmite un mensaje pong

Que funciona:

  • La conexión Socket.io funciona bien
  • El ping del cliente es recibido por el servidor, respondido con pong , que nuevamente es recibido por el cliente
  • El servidor ejecuta ping_in_intervals cada 5 segundos

Lo que no funciona:

  • Cuando el servidor ejecuta ping_in_intervals (lo que activa el envío de un ping ), ningún cliente recibe ese ping .
  • Cuando el bucle ping_in_intervals está activo, las conexiones de socket fallan aproximadamente cada minuto. Si el método está comentado, la conexión del socket se mantiene estable.

Observaciones:

  • El subproceso en el que se ejecuta ping_in_intervals no parece funcionar correctamente junto con el subproceso del servidor wsgi.
  • El subproceso ping_in_intervals desestabiliza el subproceso del servidor, lo que hace que se pierdan las conexiones (que se restablecen de inmediato, pero se caen cada minuto más o menos)
  • Creo que estoy haciendo algo terriblemente mal con el enhebrado. Tengo muy poca experiencia con subprocesos en Python y no sé dónde buscar el problema.

Servidor:

 import eventlet import socketio import threading sio = socketio.Server(cors_allowed_origins="*", async_mode='eventlet') app = socketio.WSGIApp(sio) def ping_in_intervals(): threading.Timer(5.0, ping_in_intervals).start() print("send ping") sio.emit('ping') @sio.on('ping') def ping(*args): print("received ping - send pong") sio.emit('pong') ping_in_intervals() eventlet.wsgi.server(eventlet.listen(('', 8080)), app)

Cliente:

 const socket = io.connect('localhost:8080', {secure: true, transports: ['websocket']}); socket.on('pong', () => { console.log('received pong'); }); socket.on('ping', () => { console.log('received ping'); }); socket.on('connect', () => { socket.emit('ping') });
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Encontré la solución en https://github.com/miguelgrinberg/python-socketio/blob/main/examples/server/wsgi/app.py#L16-L22

El subproceso, que envía mensajes del servidor cada n segundos, no debe iniciarse mediante threading , sino mediante la función start_background_task de socketio .

Aquí está el código de trabajo:

 import eventlet import socketio sio = socketio.Server(cors_allowed_origins="*", async_mode='eventlet') app = socketio.WSGIApp(sio) def ping_in_intervals(): while True: sio.sleep(10) sio.emit('ping') @sio.on('ping') def ping(*args): sio.emit('pong') thread = sio.start_background_task(ping_in_intervals) eventlet.wsgi.server(eventlet.listen(('', 8080)), app)
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda