核心组件
通信流程
项目 | 配置说明 |
---|---|
云服务器 | 阿里云/AWS/酷盾安全(CentOS/Ubuntu,1核2GB起步) |
后端框架 | Node.js + Express(轻量级)或 Java + Spring Boot(企业级) |
数据库 | MySQL(关系型)或 MongoDB(文档型) |
实时通信 | WebSocket(Node.js: ws 库)或 MQTT(物联网场景) |
其他依赖 | Redis(缓存在线用户)、SSL证书(加密通信) |
通信协议对比
| 协议 | 优点 | 缺点 | 适用场景 |
|———–|—————————-|—————————|———————–|
| WebSocket | 全双工通信,低延迟 | 需长连接,服务器压力大 | 实时聊天、在线协作 |
| MQTT | 轻量级,适合高并发 | 需自建代理服务器 | 物联网、移动端消息推送 |
| HTTP轮询 | 简单易实现 | 高延迟,消耗带宽 | 低频率数据更新 |
推荐方案
消息格式(JSON示例)
{ "action": "send_message", // 动作类型(send_message/heartbeat/login) "data": { "sender_id": "user123", "receiver_id": "user456", "content": "Hello!", "timestamp": 1678901234567 } }
服务器响应状态码
| 状态码 | 含义 | 说明 |
|———-|———————–|————————————-|
| 200 | 成功 | 操作正常完成 |
| 401 | 未授权 | Token过期或用户未登录 |
| 500 | 服务器内部错误 | 日志排查(如数据库连接失败) |
用户表(Users)
| 字段名 | 类型 | 说明 |
|————-|————-|—————————|
| id | VARCHAR(36) | UUID(主键) |
| username | VARCHAR(50) | 用户名(唯一) |
| password | VARCHAR(256)| 哈希密码(如bcrypt) |
| status | TINYINT | 在线状态(0=离线,1=在线) |
消息表(Messages)
| 字段名 | 类型 | 说明 |
|————-|————-|—————————|
| id | BIGINT | 自增主键 |
| sender_id | VARCHAR(36) | 发送者ID |
| receiver_id | VARCHAR(36) | 接收者ID |
| content | TEXT | 消息内容(可加密存储) |
| timestamp | BIGINT | 时间戳(毫秒) |
服务器端(Node.js)
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); const clients = new Map(); // 存储在线用户 wss.on('connection', (ws) => { ws.on('message', (data) => { const message = JSON.parse(data); if (message.action === 'send_message') { // 广播给目标用户 const targetWs = clients.get(message.data.receiver_id); if (targetWs) { targetWs.send(JSON.stringify(message.data)); } } }); ws.on('close', () => { // 清理离线用户状态 clients.delete(ws.userId); }); });
客户端(Android)
OkHttp
或Socket.IO
库建立WebSocket连接。 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("ws://yourserver.com:8080/ws").build(); WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() { @Override public void onMessage(WebSocket webSocket, String text) { // 处理收到的消息 } });
用户状态管理
userId
,服务器存入clients
映射表。 离线消息处理
offline_messages
表。 消息持久化与同步
通信安全
SSL/TLS
加密WebSocket通信(wss://
协议)。 性能优化
解答:
ACK
给服务器,服务器未收到则重发。 解答: