一个功能完整的即时通讯系统,支持用户注册登录、好友管理、私聊、群聊等功能。
- ✅ 用户注册和登录
- ✅ JWT Token 认证
- ✅ 点对点登录(一个账号只能在一个设备登录)
- ✅ 用户状态管理(在线/离线/离开)
- ✅ 搜索用户
- ✅ 发送好友请求
- ✅ 接受/拒绝好友请求
- ✅ 删除好友
- ✅ 好友列表显示
- ✅ 创建群组
- ✅ 邀请好友加入群组
- ✅ 群组成员管理
- ✅ 群组信息修改
- ✅ 删除群组
- ✅ 实时消息传输(WebSocket)
- ✅ 私聊消息
- ✅ 群聊消息
- ✅ 消息已读状态
- ✅ 输入状态提示
- ✅ 消息编辑和删除
- ✅ 消息历史记录
- ✅ 响应式设计
- ✅ 现代化UI界面
- ✅ 实时状态更新
- ✅ 消息气泡样式
- ✅ 用户头像显示
- Node.js - 服务器运行环境
- Express - Web 框架
- Socket.io - 实时通信
- MongoDB - 数据库
- Mongoose - MongoDB ODM
- JWT - 用户认证
- bcryptjs - 密码加密
- React 18 - 前端框架
- TypeScript - 类型安全
- Socket.io-client - 实时通信客户端
- Axios - HTTP 请求库
- React Context - 状态管理
im-system/
├── server/ # 后端代码
│ ├── models/ # 数据模型
│ │ ├── User.js # 用户模型
│ │ ├── Message.js # 消息模型
│ │ └── Group.js # 群组模型
│ ├── routes/ # API 路由
│ │ ├── auth.js # 认证相关
│ │ ├── friends.js # 好友管理
│ │ ├── groups.js # 群组管理
│ │ └── messages.js # 消息管理
│ ├── middleware/ # 中间件
│ │ └── auth.js # 认证中间件
│ ├── socket/ # Socket 处理
│ │ └── socketHandler.js
│ └── server.js # 服务器入口
├── client/ # 前端代码
│ ├── public/ # 静态文件
│ └── src/
│ ├── components/ # React 组件
│ │ ├── Auth/ # 认证组件
│ │ ├── Chat/ # 聊天组件
│ │ └── Sidebar/ # 侧边栏组件
│ ├── contexts/ # React Context
│ ├── types/ # TypeScript 类型
│ ├── utils/ # 工具函数
│ └── App.tsx # 应用入口
├── package.json # 项目配置
└── README.md # 项目说明
- Node.js 16+
- MongoDB 4.4+
- npm 或 yarn
git clone <repository-url>
cd im-system# 安装后端依赖
npm install
# 安装前端依赖
cd client
npm install
cd ..复制 .env 文件并配置:
PORT=3001
MONGODB_URI=mongodb://localhost:27017/im-system
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
CLIENT_URL=http://localhost:3000确保 MongoDB 服务正在运行:
mongod# 同时启动前后端
npm run dev# 启动后端服务器
npm run server
# 在另一个终端启动前端
npm run client- 前端:http://localhost:3000
- 后端API:http://localhost:3001
- API健康检查:http://localhost:3001/api/health
POST /api/auth/register- 用户注册POST /api/auth/login- 用户登录POST /api/auth/logout- 退出登录GET /api/auth/me- 获取当前用户信息
GET /api/friends- 获取好友列表GET /api/friends/search- 搜索用户POST /api/friends/request- 发送好友请求POST /api/friends/accept- 接受好友请求POST /api/friends/reject- 拒绝好友请求DELETE /api/friends/:friendId- 删除好友
GET /api/groups- 获取群组列表POST /api/groups- 创建群组GET /api/groups/:groupId- 获取群组详情PUT /api/groups/:groupId- 更新群组信息DELETE /api/groups/:groupId- 删除群组POST /api/groups/:groupId/members- 添加群组成员DELETE /api/groups/:groupId/members/:userId- 移除群组成员
GET /api/messages/private/:userId- 获取私聊消息GET /api/messages/group/:groupId- 获取群聊消息POST /api/messages/private- 发送私聊消息POST /api/messages/group- 发送群聊消息PUT /api/messages/:messageId/read- 标记消息已读PUT /api/messages/:messageId- 编辑消息DELETE /api/messages/:messageId- 删除消息
sendPrivateMessage- 发送私聊消息sendGroupMessage- 发送群聊消息joinRoom- 加入房间leaveRoom- 离开房间markMessageRead- 标记消息已读typing- 输入状态
connected- 连接成功newPrivateMessage- 新私聊消息newGroupMessage- 新群聊消息messageDelivered- 消息已送达messageRead- 消息已读userOnline- 用户上线userOffline- 用户下线userTyping- 用户输入状态error- 错误信息
{
username: String, // 用户名
email: String, // 邮箱
password: String, // 加密密码
avatar: String, // 头像URL
status: String, // 在线状态
friends: [Object], // 好友列表
friendRequests: [Object], // 好友请求
lastSeen: Date // 最后在线时间
}{
sender: ObjectId, // 发送者
recipient: ObjectId, // 接收者(私聊)
group: ObjectId, // 群组(群聊)
content: String, // 消息内容
messageType: String, // 消息类型
readBy: [Object], // 已读用户
edited: Boolean, // 是否已编辑
editedAt: Date // 编辑时间
}{
name: String, // 群组名称
description: String, // 群组描述
avatar: String, // 群组头像
owner: ObjectId, // 群主
admins: [ObjectId], // 管理员
members: [Object], // 成员列表
settings: Object, // 群组设置
lastMessage: ObjectId, // 最后一条消息
lastActivity: Date // 最后活跃时间
}# 构建镜像
docker build -t im-system .
# 运行容器
docker run -p 3001:3001 -d im-system- 构建前端:
cd client
npm run build- 设置环境变量并启动:
NODE_ENV=production npm start- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如有问题或建议,请通过以下方式联系:
- 邮箱:[email protected]
- GitHub Issues:创建 Issue
- ✅ 初始版本发布
- ✅ 完整的IM系统功能
- ✅ 用户认证和好友管理
- ✅ 私聊和群聊功能
- ✅ 实时消息传输
- ✅ 现代化用户界面