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. 【VMware VCF】VCF 5.2:部署整合架构的SDDC。

    VMware 前不久发布了 VMware Cloud Foundation 5.2 版本,并带来了许多功能的升级,比如支持 vSAN Max 分解存储,管理工作负载域支持 vSAN ESA 延伸集群, ...

  2. 22.11.20 ICPC合肥站 打星记录

    A,B,H签到. B题:注意区分相对误差与绝对误差!!小数相对误差小于1e-6,至少要输出十二位! G题优先队列.场上十几分钟就想出来了,表扬自己一波,留个坑位写题解. M题情况不多直接暴搜, 最后一 ...

  3. ArcGIS创建渔网工具的使用方法

      本文介绍在ArcMap软件中,通过"Create Fishnet"工具创建渔网,从而获得指定大小的矢量格网数据的方法.   首先,我们在创建渔网前,需要指定渔网覆盖的范围.这里 ...

  4. Docker 发布镜像

    发布镜像 在 Docker Hub 发布镜像 登陆到 Docker Hub docker login 标记镜像并推送到 Docker Hub docker tag <image>:< ...

  5. c++学习笔记(二):引用

    c++中的引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. C++ 引用 vs 指针 引用很容易与指针混淆,它 ...

  6. ERROR: Could not determine java version from 'JavaVersion.VERSION_1_8'.

    写法原为: compileOptions { sourceCompatibility 'JavaVersion.VERSION_1_8' targetCompatibility 'JavaVersio ...

  7. .NET 8.0 前后分离快速开发框架

    前言 大家好,推荐一个.NET 8.0 为核心,结合前端 Vue 框架,实现了前后端完全分离的设计理念.它不仅提供了强大的基础功能支持,如权限管理.代码生成器等,还通过采用主流技术和最佳实践,显著降低 ...

  8. Redis 入门 - 安装最全讲解(Windows、Linux、Docker)

    经过上一章节的介绍,相信大家对Redis已经有了大致的认知,今天主要给大家详细讲解Redis在Windows.Linux.Docker下的安装过程. 01.Windows 下面给大家介绍三种在Wind ...

  9. 鸿蒙Next-支付宝SDK接入教程

    App适配鸿蒙Next,开始做支付功能了,目前来说只有支付宝支持鸿蒙Next,微信还没上架,但是支付宝官方的文档跟Demo都很老,下载官方的Demo用最新版的DevEco-Studio导入都不成功. ...

  10. 录音转文字SDK哪家强?

    最近在做一款录音App,有一个模块是录音转文字功能,于是对比了市面上常见的API,国内做的比较大的主要有讯飞.腾讯.阿里.百度.华为. 讯飞 讯飞在国内做语音SDK是做的比较早的,翻译出来的准确率挺不 ...