📄 common-websocket 模块使用
内部资料,请刷新扫码登录
pigcloud
本章文档对应视频 📺 websocket 模块使用
# 前端配置开启
- 开启 websocket 转发
- 主页引入 websocket 组件,uri 指向后台的 /xxx/ws/info 接口, xxx 为实际的微服务路由前缀。
<global-websocket
uri="/admin/ws/info"
v-if="websocketEnable"
@rollback="rollback"
/>
const GlobalWebsocket = defineAsyncComponent(
() => import("/@/components/Websocket/index.vue")
);
// 获取到消息
const rollback = (msg: string) => {
useMsg().setMsg({
label: "websocket消息",
value: msg,
time: formatAxis(new Date()),
});
};
# 后端
# 1. 引入 websocket 依赖
<!--websocket 支持-->
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-websocket</artifactId>
</dependency>
# 2. 服务端向客户端发送消息
特别说明: SessionKeys 主要指定接收用户 ID
业务逻辑中,通过调用如下 API 可使用对前端推送消息
RedisMessageDistributor messageDistributor = SpringContextHolder.getBean(RedisMessageDistributor.class);
// websocket 发送消息
MessageDO messageDO = new MessageDO();
messageDO.setNeedBroadcast(Boolean.FALSE);
// 给目标用户ID
messageDO.setSessionKeys(CollUtil.newArrayList(1));
messageDO.setMessageText("消息内容");
messageDistributor.distribute(messageDO);
# 3. 服务端接口客户端发送的消息
- 默认 common-websocket 模块接收到前端消息只会默认输出到日志,不会做任何业务逻辑
log.info("sessionId {} ,msg {}", session.getId(), message);
- 可通过实现 PlanTextMessageHandler 接口实现具体的业务逻辑
@Compenent
public class BizPlanTextMessageHandler implements PlanTextMessageHandler {
@Override
public void handle(WebSocketSession session, String message) {
// 业务逻辑处理
}
}
# 特别说明
- WebSocket是一种不可靠的推送协议,且会浪费服务器资源。建议若多个微服务需要发送WebSocket消息,可以通过消息服务(需要自建的微服务B)来全局发送,这样可以保持全局只有一条链路。前端根据后端推送的消息体进行具体业务处理。