58 lines
2.3 KiB
Plaintext
58 lines
2.3 KiB
Plaintext
|
|
websocket消息服务器结构说明
|
|||
|
|
|
|||
|
|
1.核心框架
|
|||
|
|
ChatWebSocketServer
|
|||
|
|
主要作用:提供底层的客户端连接管理,消息的发送与接收,以及客户端身份信息的修改
|
|||
|
|
WebSocketMessage
|
|||
|
|
说明:消息结构标准实体类
|
|||
|
|
WebSocketUser
|
|||
|
|
说明:客户端列表属性实体类
|
|||
|
|
WebSocketMsgService
|
|||
|
|
说明:WebSocket消息处理业务接口
|
|||
|
|
WebSocketMsgServiceImpl
|
|||
|
|
说明:WebSocket消息处理业务实现类
|
|||
|
|
RetryMsgService
|
|||
|
|
说明:消息重试服务,发送失败重发,最多3次
|
|||
|
|
RetryMsgTask
|
|||
|
|
说明:定时器服务器,增加定时业务服务的地方
|
|||
|
|
|
|||
|
|
2,协议约定
|
|||
|
|
消息服务单实例,避免重复实例化错误
|
|||
|
|
消息服务器地址/ws/msgserver/{SID}
|
|||
|
|
SID为客户端唯一ID,约定使用浏览器指纹
|
|||
|
|
WebSocketMessage消息结构
|
|||
|
|
// 消息类型(如CHAT/NOTICE/ORDER/HEARTBEAT)
|
|||
|
|
private String msgType;
|
|||
|
|
// 业务数据(JSON字符串,可解析为对应业务DTO)
|
|||
|
|
private String data;
|
|||
|
|
// 发送者ID(可选,也可从WebSocket连接中获取)
|
|||
|
|
private String senderId;
|
|||
|
|
// 接收者ID(可选,单聊/广播区分)
|
|||
|
|
private String receiverId;
|
|||
|
|
// 消息时间戳
|
|||
|
|
private Long timestamp;
|
|||
|
|
消息时间戳必传,目前代码直接默认了
|
|||
|
|
重点字段msgType,申明发送的是什么消息
|
|||
|
|
发送者ID不需要传,自动获取
|
|||
|
|
接收者ID在指定传输目标时传入,目前暂时不使用
|
|||
|
|
data 字段为消息体,都是json格式
|
|||
|
|
消息举例
|
|||
|
|
{"msgType":"CHAT","data":{"instrid":"abc"},"receiverId":"LIS","timestamp":1755068400000}
|
|||
|
|
{"msgType":"CHAT","data":{"instrid":"abc"}}
|
|||
|
|
消息类型约定
|
|||
|
|
3 业务流程
|
|||
|
|
启动服务器,自动创建websocket服务实例
|
|||
|
|
客户端启动,连接websocket服务器,发送约定身份参数(非必须)
|
|||
|
|
客户端等待消息中...
|
|||
|
|
|
|||
|
|
服务器创建消息服务业务层
|
|||
|
|
定时器注册指定服务为定时任务,并声明循环周期(单线程服务,一类业务只创建一个消息服务器端)
|
|||
|
|
消息服务程序触发消息规则,给指定客户端发送消息
|
|||
|
|
客户端收到消息,做相应的处理
|
|||
|
|
|
|||
|
|
4 应用范例
|
|||
|
|
UserService
|
|||
|
|
提供基本的消息服务方法,
|
|||
|
|
常用的操作客户端方法直接操作ChatWebSocketServer完成
|
|||
|
|
包括调阅客户端列表,修改客户端附属属性,过滤,查找,给目标客户端发送消息,以及处理收到的消息
|