【问题标题】:Flask + Socketio - How do I join a room inside a route (not inside a socketio function)Flask + Socketio - 如何在路由内加入房间(不在 socketio 函数内)
【发布时间】:2020-08-23 15:48:48
【问题描述】:

我无法理解为什么我的以下代码不起作用。当用户登录时,我想根据该用户的电子邮件创建一个房间。我尝试了两种不同的方法。首先,我尝试调用 join 或 join_room,这两个都不起作用。当我尝试socketio.join(email) 时,我得到一个错误,说socketio 没有连接,当我尝试socketio.join_room(email) 时,我也得到一个错误。

@app.route("/login", methods=["GET", "POST"])
   def login():
      ...
      if userisloggedin:
         socketio.join(email) # OR socketio.join_room(email)

我尝试的第二种方法是从函数中发出并单独创建房间:

@app.route("/login", methods=["GET", "POST"])
   def login():
      ...
      if userisloggedin:
         socketio.emit("privatemsg", email, namespace="/messages") 
 
@socketio.on("privatemsg", namespace="/messages")
   def gotMessage(email):
      print("JJJJJJJ")
      socketio.join_room(email)
      

用户登录时,服务器应该打印“JJJJJJJ”,但不显示!

【问题讨论】:

    标签: flask socket.io flask-socketio


    【解决方案1】:

    您需要将客户端配置为接收privatemsg 发出事件,然后将其发送回服务器,但回调最适合此目的

    @app.route("/login", methods=["GET", "POST"])
    def login():
        ...
        if userisloggedin:
            socketio.emit("privatemsg", email, callback=gotMessage, namespace="/messages") 
     
    def gotMessage(email):
        print("JJJJJJJ")
        socketio.join_room(email)
    

    在您的客户端执行此操作:

    var socket = io();
    socket.on('privatemsg', (email, gotMessage) => {
        gotMessage(email);
    });
    

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多