如何检测用户断开连接的房间?

How can I detect what room a user disconnected from?

我有一个应用程序需要将当前用户刚刚断开连接的房间传递给服务器。用户可以通过多个选项卡进入多个房间。

我可以检测到用户是这样离开的,但它似乎无法传递数据:

@socketio.on('disconnect')
def on_disconnect():
    print(session['id'])
    print("user left " )

在我的客户端我试过这个:

socket.on('disconnect', function () {
     socket.emit('user_disconnect', {"channel": "{{symbol}}"});
 });

尽管如此,这个发射永远不会通过到服务器。我猜 window 在调用之前关闭或更改?如何在断开连接事件中将数据传递给服务器?

我相信我已经找到了解决办法。

利用 request.sid,我可以在服务器端加入事件中将房间名称与此 sid 一起存储在列表中。

@socketio.on('join')
def on_join(data):
active_rooms.append(json.dumps({'room':data['channel'],'socket_id':str(request.sid)}))

当断开连接事件被触发时,我可以查看相同的 sid 并将其用作列表中的查找。每个套接字连接的 sid 似乎都是唯一的,因此多个选项卡将产生一个新的 sid。