WebSocket是一种服务端和网页之间的通讯协议,服务端跟网页保持着长连接,可以达到服务端主动给网页发消息的功能。
常用场景:Web聊天室、通知和紧急告警、网页消息通信、物联网通讯。
SpringBoot整合WebSocket步骤:
1.导入WebSocket依赖
2.编写WebSocket处理器
3.编写WebSocket处理器路由
4.编写前端代码
导入WebSocket依赖编写WebSocket处理器路由org.springframework.boot spring-boot-starter-websocket org.springframework.boot spring-boot-starter-web
import lombok.extern.java.Log;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@Component
@Log
public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler {
public static Map sshMap = new ConcurrentHashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession webSocketSession) {
log.info("用户 连接WebSocket");
sshMap.put(UUID.randomUUID().toString(), webSocketSession);
}
@Override
public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage> webSocketMessage) {
log.info("用户发送消息");
}
@Override
public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) {
log.info("数据传输错误");
}
@Override
public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) {
log.info("用户断开连接");
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}
编写WebSocket处理器路由
import com.terry.handler.WebSocketHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSSHWebSocketConfig implements WebSocketConfigurer{
@Autowired
WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
//socket通道
//指定处理器和路径
webSocketHandlerRegistry.addHandler(webSocketHandler, "/websocket")
.setAllowedOrigins("*");
}
}
编写前端代码
websocket demo
测试类发送消息
import com.terry.handler.WebSocketHandler;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.socket.TextMessage;
import java.io.IOException;
@Controller
public class TestCtrl {
@RequestMapping("/testWebSocket")
@ResponseBody
public String testWebSocket(){
WebSocketHandler.sshMap.forEach((k, v) -> {
TextMessage textMessage = new TextMessage(" Hello websocket ! ");
try {
v.sendMessage(textMessage);
} catch (IOException e) {
e.printStackTrace();
}
});
return "发送成功!";
}
@RequestMapping("/")
public String index(){
return "index";
}
}
打开前端界面效果



