7.房间

优质
小牛编辑
134浏览
2023-12-01

在许多应用中,有必要将用户划分为可以一并处理的几个子集。最好的例子是,一个包含多个房间的聊天应用,当用户收到他所在的房间的消息,而不会收到其他人所在房间的消息。Flask-SocketIO支持通过join_room()leave_room()函数来支持房间的概念:

from flask_socketio import join_room, leave_room

@socketio.on('join')
def on_join(data):
  uername=data['username']
  room=data['room']
  join_room(room)
  send(username + ' has entered the room.',room=room)

@socketio.on('leave')
def on_leave(data):
  username = data['username']
  room = data['room']
  leave_room(room)
  send(username + ' has left the room.', room=room)

send()emit()函数接收room作为一个参数,将消息广播到所有在给定房间里的客户端。

所 有连接(到服务器)的客户端都被分配到一个房间,并且以连接的会话编号(session ID)命名这个房间的名称,这个会话编号由request.sid获得。一个既定的客户端可以加入任何一个房间,这个房间的名称可以是任何名称。当一个客 户端终止(与服务器的)连接,它将会从原来所在的房间里除名。这两个上下文无关的函数socketio.send()socketio.emit()也会接受参数room,把消息广播到这个房间里的所有客户端。

一旦所有的客户端被分配到一个自己的房间,为了将消息发送到一个唯一的客户端,会话编号可以作为参数room的值。