1. 在pom.xml配置文件中添加spring-boot-starter-websocket依赖。
<!-- websocket依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!--JSON数据解析工具依赖包 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId>
<version>5.8.10</version>
</dependency>
2. 添加WebSocket配置类 WebSocketConfig.java
package com.vv.server.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
/**
* 这个Bean会自动注册使用@ServerEndpoint注解声明的websocket endpoint
*/
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
3. 添加WebSocket请求处理类 WebSocketServer.java
package com.vv.server.controller;
import org.springframework.stereotype.Component;
import cn.hutool.json.JSONObject;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
@ServerEndpoint("/webSocket/{username}")
public class WebSocketServer {
/**
* concurrent包的线程安全Set,用来存放每个用户对应的Session对象。
*/
private static Map<String, Session> clients = new ConcurrentHashMap<>();
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(@PathParam("username") String username, Session session) throws IOException {
if (username == null) {
return;
}
clients.put(username, session);
System.out.println("用户:" + username + "已连接到websocke服务器");
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(@PathParam("username") String username) throws IOException {
clients.remove(username);
System.out.println("用户:" + username + "已离开websocket服务器");
}
/**
* 收到客户端消息后调用的方法
*/
@OnMessage
public void onMessage(String json) throws IOException {
System.out.println("前端发送的信息为:" + json);
JSONObject jsonObject = new JSONObject(json);
String username = jsonObject.getString("username");
String message = jsonObject.getString("content");
Session session = clients.get(username);
// 如果在线发送信息
if (session != null) {
sendMessageTo(json,session);
} else {
System.out.println("对方不在线,对方名字为:" + username);
}
}
/**
* 出现异常触发的方法
*/
@OnError
public void onError(Session session, Throwable error) {
error.printStackTrace();
}
/**
* 单发给某人
*/
public void sendMessageTo(String message, Session session) throws IOException {
session.getBasicRemote().sendText(message);
}
}
4. 通过在线工具连接测试WebSocket
在线测试工具:www.websocket-test.com文章来源:https://www.toymoban.com/news/detail-756377.html
文章来源地址https://www.toymoban.com/news/detail-756377.html
到了这里,关于SpringBoot中使用WebSocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!