WebSocket 封装,vue3项目 拿来即用
vue3项目,借鉴了网上的一些,感觉不太适合,就自己边借鉴,边弄了一个,复制即用
// useWebSocket.ts
// useWebSocket.ts
import { ref, onMounted, onUnmounted } from 'vue';
export interface SamListData {
// ...你的 SamListData 接口定义
}
export interface WebSocketResponse {
data: SamListData[];
}
export function useWebSocket(url: string, reconnectInterval: number = 5000) {
const data = ref<any>({});
const connected = ref(false);
let socket: WebSocket | null = null;
function connect() {
socket = new WebSocket(url);
socket.onopen = () => {
connected.value = true;
// 连接成功后发送数据请求
// console.log('连接成功后')
// socket?.send(JSON.stringify({ request: 'getData' }));
};
socket.onmessage = (event) => {
// console.log('WebSocket 11111:', JSON.parse(event.data));
// const response: WebSocketResponse = JSON.parse(event.data);
if (event.data && JSON.parse(event.data).length > 0) {
data.value = {
id: Math.floor(Math.random() * (9999999 - 1000000 + 1)) + 1000000,
data: JSON.parse(event.data),
};
}
};
socket.onerror = (event) => {
console.log('WebSocket error:', event);
};
socket.onclose = (event) => {
connected.value = false;
// console.log('WebSocket closed:', event);
// 尝试重新连接
setTimeout(connect, reconnectInterval);
};
}
// 可以在需要的时候发送消息 sendMessage({ request: 'getData' })
function sendMessage(message: any) {
if (connected.value && socket) {
socket.send(JSON.stringify(message));
}
}
onMounted(() => {
connect();
});
onUnmounted(() => {
if (socket) {
socket.close();
}
});
return {
data,
connected,
sendMessage,
};
}
// 使用const { data, connected, sendMessage } = useWebSocket('ws://192.168.1.1:9500/api/websocket/0120001')
// watch(data, (newData) => {
// console.log('Data updated:', newData)
// console.log('connected', connected)
// })
// 可以在需要的时候发送消息
// sendMessage({ request: 'getData' })
// connected 这个是连接状态
// connected 这个是连接状态

浙公网安备 33010602011771号