websockect站内聊天一对一和一对多,后端代码实现
时间: 2024-05-05 07:15:38 浏览: 17
一对一聊天:
后端代码:
```python
import asyncio
import websockets
# 用于存储连接的客户端信息
clients = {}
# 处理客户端发送来的消息
async def handler(websocket, path):
# 获取客户端的id
client_id = await websocket.recv()
print(f'客户端 {client_id} 连接成功!')
# 存储客户端信息
clients[client_id] = websocket
# 循环接收并处理消息
while True:
try:
# 接收消息
message = await websocket.recv()
print(f'接收到客户端 {client_id} 发来的消息:{message}')
# 获取消息接收方的id
receiver_id, content = message.split('|')
# 发送消息
if receiver_id in clients:
await clients[receiver_id].send(f'{client_id}|{content}')
else:
await websocket.send(f'客户端 {receiver_id} 不存在!')
except websockets.exceptions.ConnectionClosed:
# 客户端连接关闭
print(f'客户端 {client_id} 连接关闭!')
# 移除客户端信息
clients.pop(client_id)
break
asyncio.get_event_loop().run_until_complete(websockets.serve(handler, 'localhost', 8000))
asyncio.get_event_loop().run_forever()
```
客户端代码:
```javascript
const ws = new WebSocket('ws://localhost:8000');
// 连接成功后发送客户端id
ws.onopen = function(event) {
ws.send('client1');
};
// 接收服务器发送的消息
ws.onmessage = function(event) {
console.log(`收到消息:${event.data}`);
};
// 发送消息
ws.send('client2|你好,client2!');
```
一对多聊天:
后端代码:
```python
import asyncio
import websockets
# 用于存储连接的客户端信息
clients = {}
# 处理客户端发送来的消息
async def handler(websocket, path):
# 获取客户端的id
client_id = await websocket.recv()
print(f'客户端 {client_id} 连接成功!')
# 存储客户端信息
clients[client_id] = websocket
# 循环接收并处理消息
while True:
try:
# 接收消息
message = await websocket.recv()
print(f'接收到客户端 {client_id} 发来的消息:{message}')
# 发送消息给所有客户端
for cid, client in clients.items():
if cid != client_id:
await client.send(f'{client_id}|{message}')
except websockets.exceptions.ConnectionClosed:
# 客户端连接关闭
print(f'客户端 {client_id} 连接关闭!')
# 移除客户端信息
clients.pop(client_id)
break
asyncio.get_event_loop().run_until_complete(websockets.serve(handler, 'localhost', 8000))
asyncio.get_event_loop().run_forever()
```
客户端代码:
```javascript
const ws = new WebSocket('ws://localhost:8000');
// 连接成功后发送客户端id
ws.onopen = function(event) {
ws.send('client1');
};
// 接收服务器发送的消息
ws.onmessage = function(event) {
console.log(`收到消息:${event.data}`);
};
// 发送消息
ws.send('你好,大家!');
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)