Skip to content

IM WebSocket ​

这篇解决什么 ​

在线通知怎么推、消息 type 是什么。读完能对上 ImNotificationWebSocketDTO.TYPE = "im-notification",以及推送走基础设施 /infra/ws,不是 IM 自己再开一条端口。

默认端口 48080。先完成 IM 功能设计。离线补齐靠 私聊、群聊、频道消息 的 pull。框架握手见 WebSocket。

示意图:业务只组通知外壳。真正发帧的是框架 Sender。事务提交后再异步推。

从哪改 ​

名称说明仓库路径
IM 推送sendNotificationAsync / broadcastNotificationAsyncruoyi-office/yudao-module-im/.../websocket/ImWebSocketServiceImpl.java
外壳type=im-notificationImNotificationWebSocketDTO
框架WebSocketSenderApi.sendObjectyudao-module-infra-api
握手连接带 ?token=LoginUserHandshakeInterceptor
路径yudao.websocket.pathruoyi-office/yudao-server/src/main/resources/application.yaml

单体默认 yudao.websocket.enable=true,path=/infra/ws,sender-type=local。多实例再改 redis / rocketmq / kafka / rabbitmq。

推送目标用户类型固定 UserTypeEnum.ADMIN。外壳字段:conversationType、contentType、payload。进聊天流的用 1/2/3;好友申请、加群审批、通话振铃用会话类型 0(无会话)。

persistent=false 的类型只推在线,离线靠各自 pull / 专用存储。READ 游标不靠这张 WebSocket 当权威。

调用方若在事务里,推送挂到 afterCommit,再 @Async 发出,避免客户端先于库可见。

前端:PC views/im/home、UniApp pages-im 都订阅同一 type。没有 IM 专用 WebSocket Controller。

字段 ​

名称说明仓库路径
TYPE固定 im-notificationImNotificationWebSocketDTO
conversationType0 无会话 / 1 私聊 / 2 群 / 3 频道同上
contentTypeImContentTypeEnum 数字同上
payload对应通知对象同上
path默认 /infra/wsapplication.yaml

不是 LiveKit 那条 ws

媒体进 yudao.im.rtc.livekit-url(默认 7880)。本篇是业务通知。两条连错,会话能聊、电话没声,或反过来。

频道全员推走广播

receiverUserIds 空时频道推送走 broadcastNotificationAsync。私聊是点对点 sendObject(userId)。

示意图:按本仓库实现画的时序。

配置与操作 ​

IM 没有单独的 WebSocket 菜单。YAML 改 yudao.websocket:enable 默认 true,path=/infra/ws,sender-type=local(多实例再改 redis / rocketmq / kafka / rabbitmq)。握手是 ws://127.0.0.1:48080/infra/ws?token=,不走 /admin-api。

保存后 IM 只组 ImNotificationWebSocketDTO(type=im-notification),真正发帧的是 WebSocketSenderApi。目标用户类型固定 ADMIN。进聊天流的会话类型是 1/2/3;好友申请、加群审批、通话振铃用 0。频道全员推 receiverUserIds 空时走 broadcastNotificationAsync。事务提交后再 @Async 推。在线会话台账在 基础设施 → WebSocket(2525,/infra/websocket)。用户页 /im/home。媒体是 LiveKit 7880,不要连错。开启见 IM 功能设计。

IM 会话

本系统截图:完整 IM 会话页 /im/home。长连接订阅 im-notification。

WebSocket 在线

本系统截图:基础设施 → WebSocket。这里看的是框架握手,不是 LiveKit。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版