Flask 烧瓶+;Socketio-如何在路线内加入房间(而不是在Socketio功能内)

Flask 烧瓶+;Socketio-如何在路线内加入房间(而不是在Socketio功能内),flask,socket.io,flask-socketio,Flask,Socket.io,Flask Socketio,我很难理解为什么我下面的代码不起作用。当用户登录时,我想根据该用户的电子邮件创建一个房间。我试过两种不同的方法。第一次,我试着打电话给join或join_room,但两个都不起作用。当我尝试socketio.join(电子邮件)时,我得到一个错误,说socketio没有加入,当我尝试socketio.join\u room(电子邮件)时,我也得到一个错误 @app.route("/login", methods=["GET", "POST&quo

我很难理解为什么我下面的代码不起作用。当用户登录时,我想根据该用户的电子邮件创建一个房间。我试过两种不同的方法。第一次,我试着打电话给join或join_room,但两个都不起作用。当我尝试
socketio.join(电子邮件)
时,我得到一个错误,说socketio没有加入,当我尝试
socketio.join\u room(电子邮件)
时,我也得到一个错误

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

当用户登录时,服务器应该打印“jjjjjj”,但它不会显示

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

@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);
});

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

@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);
});