Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
Flask socket IO emite desde otro módulo

Casi he leído todos los artículos disponibles en Internet, pero nada parece funcionar en mi caso. He instalado matraz-socketio y todo funciona bien hasta que emito los mensajes desde un módulo que no sea app.py.

He intentado varias formas de lograr esto y también he leído en el documento al respecto usando Redis, pero tampoco funcionó para mí. Aquí están los fragmentos de código que tengo.

app.py

 from flask import Flask from flask import request from flask_socketio import send, SocketIO, emit, join_room app = Flask(__name__) # This is to stop force sorting in response, by default jsonify sorts the response keys alphabetically app.config["JSON_SORT_KEYS"] = False socketio = SocketIO(app, cors_allowed_origins="*") @socketio.on('join') def client_join_room(data): print(type(data)) room = data['room'] join_room(room) send('you have entered the room.', room=room) @app.route('/msg') def send_message(): socketio.emit("message", "Server message", room='my_room') return "I got you." if __name__ == '__main__': socketio.run(host="0.0.0.0", port=5001, debug=True, app=app)

mi_módulo.py

 def some_method(): import app app.socketio.emit("message", "Some information about process", room='my_room', broadcast=True)

Tenga en cuenta que he importado la aplicación dentro del método porque app.py también importa my_module.py

  1. Puedo unirme a la habitación.

  2. Cuando llamo a localhost: 5001/msg, emite a 'my_room'.

  3. La emisión no funciona dentro de my_module.py y no tengo idea de por qué.

Estoy consolando los mensajes que recibo del servidor en el front-end para saber con certeza qué mensajes se reciben y cuáles no.

Además, some_method() aquí es llamado por una solicitud de API de app.py. Por si acaso si eso es relevante.

Hice logger=True y luego recibo este mensaje impreso en el terminal para cada llamada de emisión. Incluso con el que está dentro some_method()

emitiendo evento "mensaje" a my_room [/]

¿Eso significa que el mensaje se envió realmente? En caso afirmativo, ¿por qué no lo obtengo en jquery en el front-end?

Esto es lo que estoy haciendo en la página html

 $(document).ready(function () { // start up the SocketIO connection to the server var socket = io.connect('http://localhost:5001/'); // this is a callback that triggers when the "message" event is emitted by the server. socket.on('message', function(msg){ console.log(msg) }); socket.emit('join', {room: 'my_room'}); });
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Intente instalar Redis y eventlet para llamadas asincrónicas y para enviar mensajes desde otros módulos. Como se describe en la documentación , puede cambiar su línea en app.py a

 socketio = SocketIO(app, cors_allowed_origins="*", message_queue='redis://', async_mode='eventlet')
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!