添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
服务器代码
Configuration.java
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
WebSocket.java
@ServerEndpoint("/webSocket/{username}")
@Component
public class WebSocket {
private static int onlineCount=0;
public static Map<String,WebSocket> clients=new ConcurrentHashMap<>();
public Session session;
private String username;
@OnOpen
public void onOpen(@PathParam("username") String username,Session session) throws IOException{
this.username=username;
this.session=session;
WebSocket.onlineCount++;
clients.put(username,this);
System.out.println("已连接");
}
@OnClose
public void onClose() throws IOException{
clients.remove(this);
WebSocket.onlineCount--;
System.out.println("已关闭");
}
@OnMessage
public void onMessage(String message){
for (WebSocket item:clients.values()) {
item.session.getAsyncRemote().sendText(message);//异步推送
}
}
@OnError
public void onError(Session session,Throwable error){
error.printStackTrace();
}
}
BaseController.java
@RestController
public class BaseController {
@RequestMapping("/test")
public String test(){
return "test --------";
}
@RequestMapping("/sendMsg")
public String sendMsg() throws IOException {
for (WebSocket webSocket:WebSocket.clients.values()) {
for (int i = 0; i <10 ; i++) {
synchronized (webSocket.session) {
webSocket.session.getBasicRemote().sendText("消息" + i);//同步推送
}
}
}
return "发送成功";
}
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>username zhangsan</h2>
<input id="text" type="text"/>
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message"> </div>
</body>
<script>
if ('WebSocket' in window){
websocket=new WebSocket("ws://localhost:8080/demo/webSocket/zhangsan");
console.log("link success")
}else{
alert("Not support websocket")
}
function send() {
var value = document.getElementById("text").value;
websocket.send(value)
}
function closeWebSocket() {
websocket.close()
}
websocket.onmessage=function (ev) {
setMessageInnerHTML(ev.data)
}
websocket.onclose=function (ev) {
setMessageInnerHTML("webSocket连接关闭")
}
websocket.onerror=function (ev) {
setMessageInnerHTML("webSocket连接发生错误")
}
websocket.onopen=function (ev) {
setMessageInnerHTML("webSocket连接成功")
}
function setMessageInnerHTML(innerHTML) {
document.getElementById("message").innerHTML+=innerHTML+"<br/>";
}
</script>
</html>