如果可以实现记得点赞分享,谢谢老铁~
一,什么是websocket
WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
Websocket是一个持久化的协议
二,websocket的原理
websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
在websocket出现之前,web交互一般是基于http协议的短连接或者长连接
websocket是一种全新的协议,不属于http无状态协议,协议名为"ws"
三,上代码
1.你需要创建一个工具类。webSocket.js
let apiUrl;
if (location.host.toLowerCase().indexOf('localhost') !== -1) {
apiUrl = 'ws://192.168.xx.xxx:8000/ws/;
} else {
apiUrl = `ws://${location.host.toLowerCase()}/ws/tuisong`;
}
const webSocketSetting = {
url: apiUrl, // 测试
};
export default webSocketSetting;
2.在你的业务代码里面开始导入
import webSocketSetting from '@/services/webSocket';
// 推送
const connectWebStocket = () => {
const token: any = localStorage.getItem('token');
if (token) {
ws = new WebSocket(`${webSocketSetting.url}?token=${token}`);
ws.onopen = function (evt) {
console.log('Connection success ...');
};
ws.onmessage = function (evt) {
const data = JSON.parse(evt.data);
if (data) {
//todo
} else {
message.destroy();
message.error(data?.message);
}
};
ws.onclose = function (evt) {
console.log('Connection closed.');
};
}
};
3.最后在你的启动生命周期挂载就好了,记得关闭websoket
useEffect(() => {
connectWebStocket();
if (ws) {
return () => ws.close();
}
},[]);