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

412
Visualizações
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 Respostas
Responde à pergunta

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 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