Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chat - TCP 即时通讯系统

一个基于 TCP 协议开发的即时通讯聊天应用,支持用户注册登录、实时消息收发、在线用户列表、历史消息等功能。

技术栈

  • Go 1.24.3
  • MySQL - 用户数据持久化存储
  • Redis - 消息流 (Redis Stream) 实现

功能特性

  • 用户注册与登录
  • 实时消息发送与接收
  • 在线用户列表查询
  • 消息历史记录 (基于 Redis Stream)
  • 心跳保活机制
  • 用户超时自动下线
  • 系统通知 (用户上线/下线)

项目结构

Chat/
├── client/              # 客户端代码
│   ├── client.go        # 客户端主程序
│   └── clitool/         # 客户端工具模块
├── server/              # 服务端代码
│   ├── main.go          # 服务端主程序
│   ├── sertool/         # 服务端工具模块
│   └── ConnectManager/  # 连接管理模块
│       ├── Manage.go    # 连接管理器
│       ├── Connection.go
│       ├── Message.go
│       └── Msg.go
├── db/                  # 数据库模块
│   ├── db.go            # MySQL 操作
│   ├── redisdb.go       # Redis 连接
│   └── redisStream.go   # Redis Stream 操作
├── go.mod
└── README.md

快速开始

前提条件

  • Go 1.24.3+
  • MySQL (运行在 localhost:3306)
  • Redis (运行在 localhost:6379)

数据库初始化

创建 MySQL 数据库和用户表:

CREATE DATABASE tcp;
USE tcp;
CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    password VARCHAR(255) NOT NULL,
    name VARCHAR(255) NOT NULL UNIQUE,
    Last_Message VARCHAR(255) DEFAULT ''
);

配置修改

根据实际情况修改数据库连接配置:

  • MySQL: db/db.go 第 20 行
  • Redis: db/redisdb.go (默认 localhost:6379)

启动服务端

cd server
go run main.go

服务端将监听 0.0.0.0:8080

启动客户端

cd client
go run client.go

使用指南

客户端操作

  1. 选择模式: 输入 1 注册 或 2 登录
  2. 输入用户名和密码
  3. 发送消息: 输入消息后回车发送

命令列表

命令 说明
/list 查看在线用户列表
/PAI 查看活跃度排名
/exit 退出客户端

消息格式

  • 发送给所有人: 直接输入消息内容
  • 私聊: 输入 @用户名:消息内容

架构说明

服务端架构

  • ConnectManager: 管理所有客户端连接
    • 添加/移除用户
    • 消息广播
    • 超时检测
    • 历史消息处理

消息流程

  1. 客户端连接服务器并完成登录
  2. 客户端发送消息到服务器
  3. 服务器将消息写入 Redis Stream
  4. 服务器从 Stream 消费消息并广播给所有在线用户
  5. 客户端接收并显示消息

注意事项

  • 心跳间隔默认 10 秒
  • 用户超时默认检测间隔
  • 首次登录从最新消息开始读取历史

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages