依赖jar包

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

使用

添加依赖

1
2
3
4
5
<dependency>
<groupId>cn.allbs</groupId>
<artifactId>allbs-websocket</artifactId>
<version>1.1.8</version>
</dependency>
1
implementation 'cn.allbs:allbs-websocket:1.1.8'
1
implementation("cn.allbs:allbs-websocket:1.1.8")

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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());
}
}

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

1
2
3
4
5
6
7
8
9
10
11
12
@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内容

获取在线用户数量

1
2
3
{
"type": "TOTAL_USER_COUNT"
}

获取所有在线用户userName

1
2
3
{
"type": "ONLINE_USER_NAME_LIST"
}

客户端发送给所有人消息

1
2
3
4
{
"type": "SEND_TO_ALL_REQUEST",
"content": "群发消息内容"
}

发送消息给指定的用户

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

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

1
WebsocketUtil.broadcast(WebSocketResponseEnum webSocketResponseEnum, T data)

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

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

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

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

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

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

发送消息给指定用户

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

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

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