根据上一篇博客: https://www.yuque.com/docs/share/969e27a5-a02c-478a-9af1-87955d61de6b?# 《Springboot 整合 websocket》一文中,简单介绍了springboot 集成原生websocket的方案, 这里在spring集成websocket的基础上, 引入SocketJs库, 封装Websocket.
1. 引入socketJs库
首先, 由于Websocket不支持低版本浏览器(client端), 所以在浏览器端引入SocketJs库. -> socket.html
](https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js">)
2. 修改client 端代码, 即app.js
//使用socketJs兼容各个版本浏览器
//ws = new WebSocket('ws://localhost:8080/socket'); //原来建立websocekt的方法
if('Websocket' in window){
ws = new WebSocket('ws://localhost:8080/socket');
console.log("使用normal websocket")
}else if('MozWebSocket' in window){
//火狐
ws = new MozWebSocket('ws://localhost:8080/socket');
}else{
//其他不支持websocket的浏览器, 用sockJS兼容
ws = new SockJS('http://localhost:8080/sockjs');
}
整段代码就是根据浏览器中有没有原生WebSocket对象, 创建ws对象.
注意: SockJs用的是http或者https协议 (https://github.com/sockjs/sockjs-client)
3. 修改后端Server (springboot) -> WebSocketConfig类
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketTextHandler(), "/socket");
registry.addHandler(new SocketTextHandler(), "/sockjs").withSockJS();
}
}
在原来的
registry.addHandler(new SocketTextHandler(), "/socket");
下多加一句
registry.addHandler(new SocketTextHandler(), "/sockjs").withSockJS();
表示, 用同一个handler, 但是走的是SockJS.