12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // src/services/websocketService.js
- import baseUrl from '@/utils/baseUrl';
- class WebSocketService {
- constructor() {
- this.ws = null;
- this.isConnected = false;
- this.messageListeners = [];
- }
- connect(token) {
- if (this.ws) {
- this.ws.close();
- }
- const baseUrls = baseUrl.WebsocketUrl; // 替换为你的 ws 地址
- const url = `${baseUrls}?token=${token}`;
- console.log('#############websocket url:', url);
- this.ws = new window.WebSocket(url);
- this.ws.onopen = () => {
- this.isConnected = true;
- console.log('[WebSocket] 连接成功');
- };
- this.ws.onmessage = (event) => {
- console.log('#############websocket event:', event);
- let message;
-
- try {
- // 尝试解析为 JSON
- message = JSON.parse(event.data);
- } catch (error) {
- // 如果不是 JSON 格式,直接使用原始字符串
- message = event.data;
- }
-
- console.log('#############websocket message:', message);
- this.messageListeners.forEach(cb => {
- if (typeof cb === 'function') {
- cb(message);
- }
- });
- };
- this.ws.onclose = (event) => {
- this.isConnected = false;
- console.log('[WebSocket] 连接关闭', event);
- };
- }
- send(data) {
- if (this.ws && this.isConnected) {
- // 如果 data 是字符串,直接发送;否则转换为 JSON
- const message = typeof data === 'string' ? data : JSON.stringify(data);
- this.ws.send(message);
- }
- }
- addMessageListener(cb) {
- this.messageListeners.push(cb);
- }
- removeMessageListener(cb) {
- this.messageListeners = this.messageListeners.filter(fn => fn !== cb);
- }
- getReadyState() {
- // 0: CONNECTING, 1: OPEN, 2: CLOSING, 3: CLOSED
- return this.ws ? this.ws.readyState : null;
- }
- }
- const wsService = new WebSocketService();
- export default wsService;
|