Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2.8 KiB
2.8 KiB
🔔 实时消息接收功能实现
✨ 功能特性
现在你的Telegram管理系统可以实时接收新消息了!就像官方Telegram网页版一样,收到新消息会立即显示在界面上。
🎯 实现效果
1. 实时消息推送
- 使用WebSocket (Socket.io) 实现双向实时通信
- 新消息到达时立即推送到前端
- 无需手动刷新即可看到新消息
2. 自动更新UI
- 新消息自动添加到当前对话窗口
- 对话列表自动更新最后消息
- 收到新消息的对话自动移到顶部
3. 未读消息计数
- 非当前对话收到新消息时显示未读计数
- 点击对话后自动清除未读标记
- 未读数量以徽章形式显示
4. 智能消息处理
- 自动识别消息所属对话
- 区分发送和接收的消息
- 避免重复显示已发送的消息
🔧 技术架构
后端实现
-
消息监听器 (BaseClient.js)
- 使用gramJS的
addEventHandler监听新消息事件 - 处理消息格式并提取关键信息
- 通过Socket.io推送到前端
- 使用gramJS的
-
Socket服务器 (SocketBus.js)
- 运行在3001端口
- 支持跨域连接
- 广播消息到所有连接的客户端
-
API端点 (/tgAccount/startMessageListener)
- 启动指定账号的消息监听
- 确保每个账号只启动一次监听
前端实现
-
Socket客户端连接
- 页面加载时自动连接Socket服务器
- 支持断线重连
- 监听
newMessage事件
-
消息处理逻辑
- 判断消息是否属于当前账号
- 更新当前对话的消息列表
- 更新对话列表的最后消息和未读计数
-
UI更新
- 新消息自动滚动到底部
- 对话列表实时重新排序
- 未读消息徽章显示
📱 使用体验
- 自动启动:打开聊天界面后自动启动消息监听
- 实时显示:新消息立即出现,无延迟
- 智能提醒:未读消息有明显标记
- 流畅交互:所有更新都是实时的,体验流畅
🚀 性能优化
- 使用WebSocket保持长连接,减少延迟
- 只推送必要的消息数据,减少带宽占用
- 前端智能判断,避免不必要的UI更新
- 支持多账号同时在线监听
💡 注意事项
- Socket端口:确保3001端口未被占用
- 防火墙:需要允许WebSocket连接
- 账号状态:只有在线的账号才能接收消息
- 资源占用:每个账号会保持一个持续的连接
🎉 总结
通过WebSocket实现的实时消息推送,让这个Telegram管理系统的聊天体验更接近官方客户端。用户可以:
- 实时看到新消息
- 及时了解未读消息
- 享受流畅的聊天体验
这种实现方式参考了Telegram官方Web客户端的设计理念,提供了良好的用户体验!