用redis开发一个简易聊天室完整代码
时间: 2023-08-04 13:18:39 浏览: 104
好的,以下是一个基于Python和Redis实现的简易聊天室的完整代码,希望能对您有所帮助。
```python
import redis
import time
# 初始化Redis连接
redis = redis.Redis(host='localhost', port=6379, db=0)
# 用户注册
def register(username, password):
if redis.hexists('users', username):
print('用户名已存在')
else:
redis.hset('users', username, password)
print('用户注册成功')
# 用户登录
def login(username, password):
if not redis.hexists('users', username):
print('用户名不存在')
elif redis.hget('users', username) != password:
print('密码错误')
else:
# 用户上线
redis.sadd('online_users', username)
print('用户登录成功')
# 创建房间
def create_room(room_name):
if redis.sismember('rooms', room_name):
print('房间已存在')
else:
redis.sadd('rooms', room_name)
print('房间创建成功')
# 加入房间
def join_room(room_name, username):
if not redis.sismember('rooms', room_name):
print('房间不存在')
else:
redis.sadd(room_name, username)
# 房间上线
redis.sadd('online_rooms', room_name)
print('加入房间成功')
# 发送消息
def send_message(room_name, username, message):
if not redis.sismember('rooms', room_name):
print('房间不存在')
elif not redis.sismember(room_name, username):
print('你不在该房间内')
else:
# 发送消息
redis.rpush(room_name, f'{username}: {message}')
print('消息发送成功')
# 接收消息
def receive_message(room_name):
if not redis.sismember('rooms', room_name):
print('房间不存在')
else:
messages = redis.lrange(room_name, 0, -1)
for message in messages:
print(message.decode('utf-8'))
# 查看在线用户和在线房间
def show_online():
online_users = redis.smembers('online_users')
online_rooms = redis.smembers('online_rooms')
print(f'在线用户:{online_users}')
print(f'在线房间:{online_rooms}')
# 用户下线
def logout(username):
# 用户下线
redis.srem('online_users', username)
# 离线消息处理
offline_messages = redis.lrange(f'{username}_messages', 0, -1)
if offline_messages:
print(f'你有{len(offline_messages)}条离线消息:')
for message in offline_messages:
print(message.decode('utf-8'))
redis.delete(f'{username}_messages')
print('用户下线成功')
# 发送离线消息
def send_offline_message(username, message):
redis.rpush(f'{username}_messages', message)
print('离线消息发送成功')
# 删除离线消息
def delete_offline_message(username):
redis.delete(f'{username}_messages')
print('离线消息删除成功')
# 清除Redis数据
def clear_redis():
redis.flushdb()
print('Redis数据已清空')
if __name__ == '__main__':
while True:
print('1. 用户注册')
print('2. 用户登录')
print('3. 创建房间')
print('4. 加入房间')
print('5. 发送消息')
print('6. 接收消息')
print('7. 查看在线用户和在线房间')
print('8. 用户下线')
print('9. 发送离线消息')
print('10. 删除离线消息')
print('11. 清除Redis数据')
print('0. 退出')
choice = input('请输入操作编号:')
if choice == '1':
username = input('请输入用户名:')
password = input('请输入密码:')
register(username, password)
elif choice == '2':
username = input('请输入用户名:')
password = input('请输入密码:')
login(username, password)
elif choice == '3':
room_name = input('请输入房间名:')
create_room(room_name)
elif choice == '4':
room_name = input('请输入房间名:')
username = input('请输入用户名:')
join_room(room_name, username)
elif choice == '5':
room_name = input('请输入房间名:')
username = input('请输入用户名:')
message = input('请输入消息内容:')
send_message(room_name, username, message)
elif choice == '6':
room_name = input('请输入房间名:')
receive_message(room_name)
elif choice == '7':
show_online()
elif choice == '8':
username = input('请输入用户名:')
logout(username)
elif choice == '9':
username = input('请输入用户名:')
message = input('请输入消息内容:')
send_offline_message(username, message)
elif choice == '10':
username = input('请输入用户名:')
delete_offline_message(username)
elif choice == '11':
clear_redis()
elif choice == '0':
break
else:
print('无效操作,请重新输入')
time.sleep(1)
```
需要注意的是,这个聊天室还有很多可以改进的地方,例如添加用户验证、处理异常情况等,具体实现还需要根据实际需求进行调整。
阅读全文