IT评测·应用市场-qidao123.com技术社区

标题: websocket封装与利用 [打印本页]

作者: 鼠扑    时间: 2024-8-3 02:21
标题: websocket封装与利用
新建WebSocketService.js

  1. export default class WebSocketService {
  2.     constructor(url, getSocketMsg, sendSucc) {
  3.         this.url = url;
  4.         this.getSocketMsg = getSocketMsg;
  5.         this.sendSucc = sendSucc; // 发送命令成功后的回调,可有可无
  6.                
  7.                
  8.         this.socketTask = null;
  9.         this.isOpenSocket = false;
  10.         this.socketPrestore = {
  11.             state: false,
  12.             data: null
  13.         };
  14.     }
  15.     connect() {
  16.         this.socketTask = uni.connectSocket({
  17.             url: this.url,
  18.             success: ()=>{
  19.                                 console.log('正在建立socket链接:', this.url);
  20.                         },
  21.         });
  22.         this.socketTask.onOpen(() => {
  23.                         console.log("WebSocket连接已发开...!");
  24.             this.isOpenSocket = true;
  25.                        
  26.             if (this.socketPrestore.state) {
  27.                 this.sendSocketData(this.socketPrestore.data);
  28.                 this.socketPrestore.state = false;
  29.             }
  30.         });
  31.         this.socketTask.onMessage((res)=>{
  32.                         this.getSocketMsg(res)
  33.                 });
  34.         this.socketTask.onClose(() => {
  35.             this.isOpenSocket = false;
  36.         });
  37.     };
  38.         sendSocketData(data) {
  39.             if (this.isOpenSocket) {
  40.                 const sendData = JSON.stringify(data);
  41.                         console.log("发送socket数据:", sendData);
  42.                 this.socketTask.send({
  43.                                 data: sendData,
  44.                                 success: ()=>{
  45.                                         console.log("socket消息发送成功");
  46.                                         this.sendSucc && this.sendSucc()
  47.                                 }
  48.                         });
  49.             } else {
  50.                 this.socketPrestore.data = data;
  51.                 this.socketPrestore.state = true;
  52.                         this.connect(this.url)
  53.             }
  54.         };
  55.     close() {
  56.         if (this.isOpenSocket) {
  57.             this.socketTask.close();
  58.             this.isOpenSocket = false;
  59.         }
  60.     }
  61. }
复制代码
关于socketPrestore 部门代码处理机制是根据我的业务添加的,防止发送命令的时间socket链接被服务主动断开做的机制处理,若不需要直接删除就行。
方法调用

  1. <script>
  2.         //引入websocket文件
  3.         import WebSocketService from '@/utils/WebSocketService.js'
  4.         export default {
  5.                 data() {
  6.                         return {
  7.                                 socket: null,
  8.                         }
  9.                 },
  10.                 mounted() {
  11.                         const url = 'wss://.....'// socket地址
  12.                         this.socket = new WebSocketService(url, this.receiveSocketData, this.sendSucc)
  13.                 },
  14.                 methods: {
  15.                         receiveSocketData(res){
  16.                                 console.log('接收到socket数据:', res);
  17.                         },
  18.                         sendSucc(){
  19.                                 console.log('发送命令成功后的回调');
  20.                         }
  21.                 }
  22.         }
  23. </script>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4