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应用防火墙)
821 0
|
前端开发
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
|
9天前
|
消息中间件 缓存 前端开发
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
WebSocket 是双向通信通道,适合前端实时交互;MQTT 是轻量级消息协议,支持发布/订阅与可靠传输。二者互补,常结合使用:前端通过 WebSocket 接入,后端以 MQTT 实现高并发消息分发,构建可扩展的现代即时通讯系统。
207 17
|
5月前
|
前端开发 数据可视化 JavaScript
惊喜! Github 10k+ star 的国产流程图框架,LogicFlow 能解你的图编辑痛点?
LogicFlow 是一款高效、灵活的流程图编辑框架,支持可视化渲染、自定义节点、插件扩展及前端执行。适用于审批流、ER 图、低代码平台等多种场景,具备清晰架构与活跃社区,助力开发者快速实现专业流程图编辑与执行。
314 1
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
866 10
|
存储 开发框架 安全
ASP.NET WebApi 如何使用 OAuth2.0 认证
ASP.NET WebApi 如何使用 OAuth2.0 认证
331 1
|
移动开发 开发框架 JavaScript
基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
|
开发框架 NoSQL 关系型数据库
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合
|
Java API
解决HTTP 400 Bad Request错误的方法
解决HTTP 400 Bad Request错误的方法
|
网络协议 前端开发 网络架构
Django使用WebSocket
Django使用WebSocket
331 0