websocket 的创建

简介: websocket 的创建

一、websocket 创建并连接

store / index.ts

import {
    createPinia } from 'pinia';
import useWebsocketStore from './modules/websocket';

const pinia = createPinia();

export {
    useWebsocketStore };
export default pinia;

store / modules / websocket / index.ts

export type RoleType = '' | '*' | 'admin' | 'user';
export interface websocketStore {
    
  logInfo: [];
  simraeInfo: [];
  equipmentInfo: [];
  serverTime: string;
}

store / modules / websocket / types.ts

```css
import { defineStore } from 'pinia';
import { websocketStore } from './types';

const websocketStore = defineStore('websocketStore', {
state: (): websocketStore => ({
logInfo: [],
simraeInfo: [],
equipmentInfo: [],
}),

getters: {
getLogInfo() {
return this.logInfo;
},
getSimraeInfo() {
return this.simraeInfo;
},
getEquipmentInfo() {
return this.equipmentInfo;
},
},

actions: {
setLogInfo(data) {
this.logInfo.unshift(data);
},
setSimraeInfo(data) {
this.simraeInfo = data;
},
setEquipmentInfo(data) {
this.equipmentInfo = data;
},
},
});
export default websocketStore;

>  ## websocket.ts
```ts
import { useWebsocketStore } from '@/store';

const addr = 'http://192.168.1.1:8083/'.replace('http:', 'ws:');
const WSS_URL = `${addr}socket/msg`;
const websocketStore = useWebsocketStore();
let Socket;

export function createSocket() {
  if (!Socket) {
    console.log('建立连接', WSS_URL);
    Socket = new WebSocket(WSS_URL);
    Socket.onopen = openWS;
    Socket.onmessage = messageWS;
    Socket.onerror = errorWS;
    Socket.onclose = closeWS;
    window.onunload = onunload;
  }
}

export function openWS() {
  console.log(`WebSocket连接成功  状态码:${Socket.readyState}`);
}

export function errorWS() {
  console.log(`WebSocket连接失败  状态码:${Socket.readyState}`);
}

export function messageWS(e) {
  const newData = JSON.parse(e.data);

  if (newData.log) {
    websocketStore.setLogInfo(newData.log);
  } else if (newData.simRae) {
    websocketStore.setSimraeInfo(newData);
    console.log('newData.simRae', newData.simRae);
  }else {
    websocketStore.setEquipmentInfo(newData);
  }
  // dataStore.setReFreshFlag(e.data + Math.random());
}

export function closeWS() {
  if (Socket && Socket.close !== null) {
    Socket.close();
    console.log('关闭连接');
  }
  Socket = null;
}

export function onunload() {
  // Socket.close()
}

/** 发送心跳 */
export function sendPing() {
  Socket.send(new Date());
  // setIntervalWesocketPush = setInterval(() => {
  //   Socket.send('ping')
  // }, 5000)
}

export function sendWSPush() {
  if (Socket !== null && Socket.readyState === 3) {
    // if (Socket.close) {
    //   Socket.close()
    // }
    // createSocket() // 重连
  } else if (Socket.readyState === 1) {
    Socket.send();
  } else if (Socket.readyState === 0) {
    setTimeout(() => {
      Socket.send();
    }, 60000);
  }
}
相关文章
|
运维 网络安全 Windows
【运维知识进阶篇】教你部署云锁WAF(Web应用防火墙)
【运维知识进阶篇】教你部署云锁WAF(Web应用防火墙)
742 0
|
前端开发
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
|
12月前
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
689 10
|
移动开发 开发框架 JavaScript
基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
|
开发框架 NoSQL 关系型数据库
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合
|
12月前
|
存储 SQL 安全
XSS漏DONG原理(一)
XSS漏DONG原理(一)
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
Java API
解决HTTP 400 Bad Request错误的方法
解决HTTP 400 Bad Request错误的方法
|
网络协议 前端开发 网络架构
Django使用WebSocket
Django使用WebSocket
262 0
|
安全 JavaScript Java
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等
1751 0
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等