python的websocket写个登录聊天室例子
时间: 2023-08-03 17:02:18 浏览: 36
当然,下面是一个使用Python的`websocket`模块实现登录聊天室的简单例子:
```python
from websocket import WebSocketServer, WebSocketApp
import json
# 用于存储已登录用户的信息
users = {}
def on_connect(client):
print("Client connected")
def on_message(client, message):
data = json.loads(message)
if data["type"] == "login":
handle_login(client, data)
elif data["type"] == "message":
handle_message(client, data)
def on_disconnect(client):
user = users.get(client)
if user:
del users[client]
print(f"User {user['username']} disconnected")
def handle_login(client, data):
username = data["username"]
users[client] = {"username": username}
print(f"User {username} logged in")
def handle_message(client, data):
message = data["message"]
user = users.get(client)
if user:
username = user["username"]
print(f"{username}: {message}")
# 广播消息给所有已登录用户
for c in users.keys():
c.send(json.dumps({"type": "message", "username": username, "message": message}))
if __name__ == "__main__":
server = WebSocketServer(host="localhost", port=8000)
@server.websocket("/chat")
def chat(client):
on_connect(client)
while True:
message = client.recv()
if not message:
break
on_message(client, message)
on_disconnect(client)
server.run()
```
在这个例子中,我们首先导入了`WebSocketServer`和`WebSocketApp`类,还有`json`模块用于处理JSON数据。
然后定义了一个全局的`users`字典,用于存储已登录用户的信息。
接下来,我们定义了三个回调函数:`on_connect`、`on_message`和`on_disconnect`,分别处理连接建立、消息接收和连接断开事件。
在`on_message`函数中,我们首先将收到的消息解析为JSON格式的数据。根据数据中的`type`字段来判断是登录请求还是普通消息。如果是登录请求,我们调用`handle_login`函数处理登录逻辑;如果是普通消息,我们调用`handle_message`函数处理消息逻辑。
在`handle_login`函数中,我们将用户名存储到`users`字典中,并打印登录信息。
在`handle_message`函数中,我们取出发送消息的用户信息,并将消息广播给所有已登录用户。
最后,在`main`函数中,我们创建一个`WebSocketServer`对象,并通过`websocket`装饰器定义了一个路由为"/chat"的WebSocket处理函数。在该处理函数中,我们调用上述回调函数来处理连接、消息和断开事件。
这只是一个简单的登录聊天室示例,实际使用时还可以根据需求进行更多的功能扩展。