添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
添加websocket配置类
@Configuration
public class WebSocketConfig {
/**
* 这个Bean会自动注册使用@ServerEndpoint注解声明的websocket endpoint
*/
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
添加websocket Endpoint
@Slf4j
@Component
@ServerEndpoint("/ws/{name}")
public class WebSocketTest {
// @Component 虽然表示是springboot的单例,但是这个创建的单例并不会用到.
// 实际新的websocket连接进来的时候, 会创建新的 WebSocketTest 实例,所以这里的name、session属性都是该连接私有的
private String name;
private Session session;
// 可以创建一个构造器测试,是不是新的websocket连接进来会创建新的实例.
// public WebSocketTest() {
// System.out.println("创建");
// }
// 可以创建一个静态属性保存所有的websocket连接
// private static ConcurrentHashMap<String, WebSocketTest> webSocketSet = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(Session session, @PathParam(value = "name") String name) {
this.name = name;
this.session = session;
// name 是用来表示唯一客户端
webSocketSet.put(name, this);
System.out.println("OnOpen");
}
@OnClose
public void OnClose() {
System.out.println("OnClose");
}
@OnMessage
public void OnMessage(String msg) throws IOException {
System.out.println(msg);
session.getBasicRemote().sendText("Hello " + name);
}
@OnError
public void onError(Session session, Throwable error) {
log.info("发生错误");
error.printStackTrace();
}
}
测试
可以通过在线 websocket 客户端来测试你的 ws 服务:http://coolaf.com/tool/chattest
.