vue2.x 使用 socket 数据交互

简单封装 socket

//生成唯一标识符
function getUuid {
let s = [];
let hexDigits = "0123456789abcdef";
for (let i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4";
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = "-";
return s.join("");
}; class socketClient {
wsUrl = "";
wsAuto = {};
websocket = null;
constructor(wsUrl, wsAuto) {
this.wsUrl = wsUrl;
this.wsAuto = wsAuto;
}
// 初始化socket
initWebSocket() {
this.websocket = new WebSocket(this.wsUrl);
console.log("========= create websocket ===========");
this.wsOpen().then((res) => {
console.log("========= onopen websocket ===========", res);
this.wsSend(this.wsAuto);
console.log("========= 授权完成 ===========");
}); this.websocket.onerror = (evt) => {
console.log("========= 连接错误 ===========", evt);
}; this.websocket.onclose = (evt) => {
console.log("========= 客户端断开连接 ===========", evt);
};
}
// 打开连接
wsOpen() {
if (this.websocket) {
return new Promise((resolve, reject) => {
try {
this.websocket.onopen = (evt) => {
resolve(evt);
};
} catch (err) {
reject(err);
}
});
}
}
// 关闭连接
wsClose() {
if (this.websocket) {
this.websocket.close();
return new Promise((resolve, reject) => {
try {
this.websocket.onclose = (evt) => {
console.log("========= 客户端断开连接 ===========", evt);
resolve(evt);
};
} catch (err) {
reject(err);
}
});
}
}
// 监听消息
wsMessage(callback) {
// 需要监听的消息路径
if (this.websocket) {
try {
this.websocket.onmessage = (evt) => {
// 判断是否有 data 数据
if (evt.data) {
let data = evt.data;
if (this.isJsonString(data)) {
callback(JSON.parse(data));
}
}
};
} catch (err) {
callback(err);
}
}
}
// 发送消息
wsSend(options, isFile = false) {
if (this.websocket) {
try {
if (isFile) {
let params = { ...options };
params.RequestId = getUuid();
this.websocket.send(params);
} else {
this.websocket.send(JSON.stringify(options));
}
} catch (e) {
console.log('错误', e)
}
}
}
// 连接因错误而关闭时触发
wsOnerror() {
if (this.websocket) {
return new Promise((resolve, reject) => {
try {
this.websocket.onerror = (evt) => {
resolve(evt);
};
} catch (err) {
reject(err);
}
});
}
}
// 判断是否是json字符串
isJsonString(str) {
try {
if (typeof JSON.parse(str) == "object") {
return true;
}
} catch (e) {
console.log("isJsonString:错误捕获");
}
return false;
}
} export { socketClient };

在 main.js 上引用

// ********** socket **********
import { socketClient } from "./utils/socket";
// 初始化 socket
const ws_wyf_url = "ws://xxx.xxx.xxx.xxx:8080/conn?u=123ad";
const wsAuto = {
appId: "xxxx",
appSecret: "xxxxxxx"
};
const wsocket = new socketClient(ws_wyf_url, wsAuto);
wsocket.initWebSocket();
Vue.prototype.$ws = wsocket;

vue2.x 组件使用

<script>
created() {
// 监听消息
this.$ws.wsMessage((res) => {
console.log(res)
});
}, // 发送消息
let parm = {
name:"asd"
}
this.$ws.wsSend(patm);
</script>

封装socket 到vue2.x 使用的更多相关文章

  1. 封装Socket.BeginReceive/EndReceive支持Timeout简介

    .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特性,在需考虑程 ...

  2. 封装Socket.BeginReceive/EndReceive以支持Timeout

    Socket .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特 ...

  3. 基于事件驱动的前端通信框架(封装socket.io)

    socket.io的使用可以很轻松的实现websockets,兼容所有浏览器,提供实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验.但是在使用socket.io的过程中,由于业务需求需要同 ...

  4. [ActionScript 3.0] AS3.0 简单封装Socket的通信

    Socket服务器 package com.controls.socket { import com.models.events.AppEvent; import com.models.events. ...

  5. Tomcat原理系列之六:详解socket如何封装成request(上)

    目录 参与者 总结 @(详解socket如何封装成request) 看源码虽然不能马上提升你的编码水平.但能让你更好的理解编程. 因为我们tomcat多是以NIO形式处理请求,所以本系列讲的都是NIO ...

  6. 试解析Tomcat运行原理(一)--- socket通讯

    关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...

  7. socket 通信

    type TWinSocketStringStream = class(TWinSocketStream) public function ReadString(nMaxLength: Integer ...

  8. C# Socket系列二 简单的创建 socket 通信

    看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...

  9. python_way ,day9 socket 和soctet多线程的使用

    1.socket的基础 tcp/ip tcp ip 协议是主机接入互联网以及接入互联网互联两台主机通信互联标准     物理层:传输二进制 链路层:对二进制数进行分组  ,唯一标示一台主机       ...

  10. 面向连接的Socket Server的简单实现(简明易懂)

    一.基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果. 这经常涉及到如果管理多个连接及如何 ...

随机推荐

  1. 3.2.0 版本预告!远程日志解决 Worker 故障获取不到日志的问题

    Apache DolphinScheduler 3.2.0 版本已经呼之欲出,8 月 中下旬,这个大版本就要和用户见面了.为了让大家提前了解到此版本更新的主要内容,我们已经制作了几期视频和内容做了大致 ...

  2. React 高德地图 进京证 路线规划 问题小记

    一.加载问题 用高德地图做了个进京证路线规划的功能,官网也是有 React 代码示例.但是吧,这个Demo有问题,地图是能加载成功,但是其他功能再用 map 这个变量肯定不行,果不其然是null,处理 ...

  3. JAVA学习——JDK开发环境配置

    2024/07/08 一.JDK下载 二.安装与JDK开发环境配置(Windows) 三.安装与JDK开发环境配置(Linux) 一.JDK下载与安装 网址: https://www.oracle.c ...

  4. zabbix4.0配置短信报警

    1.准备工作 #访问短信网址:172.16.98.1,网线插LAN口 #账号&密码:admin 安装ubuntu系统模拟http请求工具(命令行模式) # apt-get install ht ...

  5. Prism:框架介绍与安装

    Prism:框架介绍与安装 什么是Prism? Prism是一个用于在 WPF.Xamarin Form.Uno 平台和 WinUI 中构建松散耦合.可维护和可测试的 XAML 应用程序框架 Gith ...

  6. 即构音视频 Express Flutter SDK 全面支持空安全

    Flutter 是一套移动 UI 框架,可以快速在 iOS.Android 上构建高质量的原生用户界面.作为其官方语言 Dart 是类型安全的,当开发者获取变量的时候,编译器可以保证变量的类型,但类型 ...

  7. 使用Hexo主题搭建个人博客(markdown)

    依赖环境 安装node.js:node.js下载可以从其官方界面开始https://nodejs.org/zh-cn/ 安装git:git下载则可以从其官方界面开始https://git-scm.co ...

  8. ST-SSL: 用于交通流量预测的时空自监督学习《Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction》(交通流量预测、时空异质性、自监督、数据增强)

    2023年10月23日,继续论文,好困,想发疯. 论文:Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction Git ...

  9. ASP.NET Core – DateTime, DateTimeOffset, DateOnly, TimeOnly, TimeSpan, TimeZone, NodaTime 使用基础

    前言 心血来潮,这篇讲点基础的东西. 对日期和时区 timezone 不熟悉的读者,请先看这篇 Time Zone, Leap Year, Date Format, Epoch Time 时区, 闰年 ...

  10. Stooges – AI 孙燕姿

    很久没有写文章了... 最近听了 AI 孙燕姿 的一首歌 <一场游戏一场梦>, 有感而发. 所以特别写一篇记入一下我的这半年很火的 AI 的想法.