if isinstance(message[1], list): # 消息类型为列表 data = json.dumps(message[1]) for i in range(len(users)): # 向所有用户发送在线列表 users[i][0].send(data.encode()) if isinstance(message[1], dict): # 消息类型为字典 # friend_list_all = {} # 存放所有用户的好友 for i in range(len(users)): # 遍历所有用户 username = users[i][1] # 获取用户名字 friend_list = Userfriend(username) # 获取用户好友列表 data = json.dumps(friend_list) users[i][0].send(data.encode()) 用python代码在此基础上编写,将用户列表和好友列表分别增添消息头以区分两种消息类型
时间: 2023-12-17 15:03:54 浏览: 36
在此基础上,我们可以将用户列表和好友列表分别增添消息头并发送到客户端,以便客户端能够区分不同类型的消息。假设我们使用 "user_list" 作为用户列表的消息头,使用 "friend_list" 作为好友列表的消息头,则代码如下:
```python
import json
# 构造用户列表消息
user_msg = {
"type": "user_list",
"data": user_list
}
user_data = json.dumps(user_msg).encode()
# 构造好友列表消息
friend_msg = {
"type": "friend_list",
"data": friend_list
}
friend_data = json.dumps(friend_msg).encode()
# 将用户列表发送给所有在线用户
for user in online_users:
user_socket = user[0] # 用户的socket对象
user_data_with_header = b"user_list" + user_data
user_socket.send(user_data_with_header)
# 遍历所有用户,将好友列表发送给其好友对应的在线用户
for i in range(len(users)):
username = users[i][1] # 获取用户名字
friend_list = Userfriend(username) # 获取用户好友列表
friend_msg = {
"type": "friend_list",
"data": friend_list
}
friend_data = json.dumps(friend_msg).encode()
for friend in friend_list:
friend_socket = get_user_socket_by_name(friend) # 根据好友名字获取其socket对象
if friend_socket is not None:
friend_data_with_header = b"friend_list" + friend_data
friend_socket.send(friend_data_with_header)
```
在上面的代码中,我们首先构造了用户列表消息和好友列表消息,并为其分别增加了消息头。然后,我们使用 `b"..."` 的方式将字符串转为字节流,并使用 `+` 运算符将消息头和消息内容拼接起来。接着,我们将用户列表消息发送给所有在线用户。最后,我们遍历所有用户,获取其好友列表,并将好友列表消息发送给其好友对应的在线用户。在发送消息时,我们根据消息头来区分不同类型的消息,以便客户端能够正确地处理不同类型的消息。