依赖jar包

引入包 版本
jdk 1.8
spring boot 2.7.2
spring-boot-starter-websocket 2.7.2
allbs-common 1.1.6

使用

添加依赖

<dependency>
  <groupId>cn.allbs</groupId>
  <artifactId>allbs-websocket</artifactId>
  <version>1.1.8</version>
</dependency>
implementation 'cn.allbs:allbs-websocket:1.1.8'
implementation("cn.allbs:allbs-websocket:1.1.8")

重写权限认证模块(必须)

@Component
public class AllbsAuthHandler extends AuthMessageHandler {

    @Override
    public void execute(WebSocketSession session, AuthRequest message) {
        // 如果未传递 accessToken
        if (!StrUtil.isAllNotEmpty(message.getAccessToken(), message.getUserName())) {
            WebSocketUtil.send(session, "401",
                    AuthResponse.builder().content(StrUtil.format("参数{}为必传参数", "userName")).build());
            throw new MessageHandlerException("缺少必要参数userName!");
        }
        // 添加到 WebSocketUtil 中
        WebSocketUtil.addSession(session, message.getUserName());
        // 判断是否认证成功。
        WebSocketUtil.send(session, "200", AuthResponse.builder().content("连接成功").build());
    }
}

前端发送的消息需要自定义处理

@Slf4j
@Component
public class AllbsSysDefaultHandler extends SysDefaultHandler {

    @Override
    public void execute(WebSocketSession session, SysDefaultRequest message) {
        log.info("接收消息内容为:" + message);
        // 回复消息
        SysDefaultRequest defa = SysDefaultRequest.builder().content("消息放松成功").build();
        WebSocketUtil.send("1", "200", defa);
    }
}

前端可发送的json内容

获取在线用户数量

{
  "type": "TOTAL_USER_COUNT"
}

获取所有在线用户userName

{
  "type": "ONLINE_USER_NAME_LIST"
}

客户端发送给所有人消息

{
  "type": "SEND_TO_ALL_REQUEST",
  "content": "群发消息内容"
}

发送消息给指定的用户

{
  "type": "SEND_TO_ONE_REQUEST",
  "toUserName": "1",
  "content": "这是单独发送的消息内容"
}

后端主动推送消息给所有用户

WebsocketUtil.broadcast(WebSocketResponseEnum webSocketResponseEnum, T data)

后端主动推送消息给所有用户方式二

WebsocketUtil.broadcast(String code, String msg, T data)

后端主动推送消息给所有用户(除自己)

WebsocketUtil.broadcastWithoutSelf(WebSocketResponseEnum webSocketResponseEnum, T data, String userName)

后端主动推送消息给所有用户(除自己)方式二

WebsocketUtil.broadcastWithoutSelf(String code, String msg, T data, String userName)

发送消息给指定用户

WebsocketUtil.send(String userName, String code, String msg, T data)

发送消息给指定用户方式二

WebsocketUtil.send(String userName, WebSocketResponseEnum webSocketResponseEnum, T data)