websocket封装与利用

打印 上一主题 下一主题

主题 2027|帖子 2027|积分 6081

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新建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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表