Thanks to visit codestin.com
Credit goes to github.com

Skip to content

isPrisoner/Chat-room

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go 聊天室系统

这是一个使用 Go 语言实现的实时聊天室系统,具有用户管理、消息广播、活跃度排行榜等功能。该系统采用 TCP 协议进行通信,并使用 Redis 存储用户活跃度数据。

功能特性

  • 用户管理:用户通过输入用户名加入聊天室,支持唯一用户名验证
  • 实时消息广播:所有用户可以在聊天室中实时交流
  • 活跃度排行榜:基于 Redis 实现的用户活跃度统计和排行功能
  • 日志系统:完整的日志记录,管理员可查看用户的进入、退出和聊天情况
  • 安全退出:用户输入 exit 可以安全退出聊天室
  • 面向对象设计:采用面向对象的设计思想,代码结构清晰
  • 防粘包处理:自定义协议解决 TCP 通信中的粘包问题

系统架构

  • 客户端 (client):处理用户输入和显示聊天消息
  • 服务端 (server):处理客户端连接、消息广播和用户管理
  • 协议层 (proto):自定义通信协议,解决 TCP 粘包问题
  • 数据存储:使用 Redis 存储用户活跃度数据

技术栈

  • 语言:Go 1.22
  • 网络通信:TCP Socket
  • 数据存储:Redis
  • 日志系统:logrus
  • 并发控制:goroutine 和 channel

安装与运行

前置条件

  1. 安装 Go 1.22 或更高版本
  2. 安装并启动 Redis 服务

安装依赖

go mod tidy

运行服务端

go run server/server.go

运行客户端

go run client/client.go

使用说明

客户端命令

  • 输入用户名加入聊天室(用户名不能为空且不能重复)
  • 输入消息内容发送消息(消息不能为空)
  • 输入 all 查看活跃度排行榜
  • 输入 exit 安全退出聊天室

服务端命令

  • top10:查看排名前十的用户
  • all:查看所有用户的排行榜
  • rank <用户名>:查看指定用户的排名
  • del <用户名>:删除指定用户的排名数据

Redis 配置

系统使用 Redis 存储用户活跃度数据和消息流。默认配置如下:

rdb = redis.NewClient(&redis.Options{
    Addr:     "182.42.110.229:6379",
    Password: "xiaomu@303",
    DB:       0,
})

注意:在实际部署时,请根据您的 Redis 服务配置修改以上参数。

项目结构

Chat-room/
├── client/
│   └── client.go    # 客户端实现
├── server/
│   └── server.go    # 服务端实现
├── proto/
│   └── proto.go     # 通信协议实现
├── go.mod           # Go 模块定义
├── go.sum           # 依赖版本锁定
├── server.log       # 服务端日志
└── README.md        # 项目说明文档

通信协议

为解决 TCP 通信中的粘包问题,系统实现了自定义的通信协议:

  1. 消息头:4 字节,表示消息体的长度
  2. 消息体:实际的消息内容

开发历程

  1. 基础聊天室功能实现
  2. 面向对象改造,优化代码结构
  3. 添加 Redis 活跃度排行榜功能
  4. 解决客户端查看活跃度排行榜带来的粘包问题

注意事项

  • 服务端默认监听 8081 端口,请确保该端口未被占用
  • 确保 Redis 服务正常运行且配置正确
  • 日志文件保存在项目根目录下的 server.log 中

许可证

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages