websocket消息服务器模块

This commit is contained in:
tangw 2025-11-27 19:26:16 +08:00
parent 805d9a2ffa
commit 8a5921f35d
2 changed files with 21 additions and 2 deletions

View File

@ -46,6 +46,9 @@ public class WebSocketMsgServiceImpl implements WebSocketMsgService {
case "CHAT": // 单聊消息 case "CHAT": // 单聊消息
handleChatMsg(wsMessage); handleChatMsg(wsMessage);
break; break;
case "CLIENT": // 客户端信息
setClientInfo(wsMessage);
break;
case "BROADCAST": // 广播消息 case "BROADCAST": // 广播消息
handleBroadcastMsg(wsMessage); handleBroadcastMsg(wsMessage);
break; break;
@ -169,4 +172,20 @@ public class WebSocketMsgServiceImpl implements WebSocketMsgService {
// 回复心跳确认 // 回复心跳确认
ChatWebSocketServer.sendToUser(senderId, JSON.toJSONString(new WebSocketMessage("HEARTBEAT_ACK", "pong", senderId, null, System.currentTimeMillis()))); ChatWebSocketServer.sendToUser(senderId, JSON.toJSONString(new WebSocketMessage("HEARTBEAT_ACK", "pong", senderId, null, System.currentTimeMillis())));
} }
/**
* 示例3:给在线用户设置动态属性(如设备类型)
*/
public void setClientInfo(WebSocketMessage wsMessage) {
String senderId = wsMessage.getSenderId();
String data = wsMessage.getData();
Map<String, Object> dataStrMap = JSON.parseObject(data, Map.class);
WebSocketUser user = ChatWebSocketServer.getOnlineUser(senderId);
if (user != null) {
for (Map.Entry<String, Object> entry : dataStrMap.entrySet()) {
String key = entry.getKey();
String value =(String)entry.getValue();
user.setDynamicAttr(key, value);
}
}
}
} }

View File

@ -37,8 +37,8 @@ WebSocketMessage消息结构
接收者ID在指定传输目标时传入,目前暂时不使用 接收者ID在指定传输目标时传入,目前暂时不使用
data 字段为消息体,都是json格式 data 字段为消息体,都是json格式
消息举例 消息举例
{"msgType":"CHAT","data":{"instrid":"abc"},"receiverId":"LIS","timestamp":1755068400000} {"msgType":"CLIENT","data":{"instrid":"abc"},"receiverId":"LIS","timestamp":1755068400000}
{"msgType":"CHAT","data":{"instrid":"abc"}} {"msgType":"CLIENT","data":{"instrid":"abc"}}
消息类型约定 消息类型约定
3 业务流程 3 业务流程
启动服务器,自动创建websocket服务实例 启动服务器,自动创建websocket服务实例