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. WhaleScheduler为银行业全信创环境打造统一调度管理平台解决方案

    项目背景 数字金融是数字经济的重要支撑和驱动力.近年来,我国针对数字金融的发展政策频频出台,<金融科技发展规划 (2022-2025年)>.<"十四五"数字经济发 ...

  2. ELT已死,EtLT才是现代数据处理架构的终点!

    提到数据处理,经常有人把它简称为"ETL".但仔细说来,数据处理经历了ETL.ELT.XX ETL(例如,Reverse ETL.Zero-ETL)到现在流行的EtLT架构几次更迭 ...

  3. JavaScript魔法:在线Excel附件上传与下载的完美解决方案

    最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Exce ...

  4. LeetCode40.组合总和II

    LeetCode40.组合总和II 力扣题目链接(opens new window) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...

  5. 代码随想录Day19

    235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个 ...

  6. C语言编程-GCC编译过程

    gcc编译 预处理 ->编译->汇编->链接 预处理 gcc -E helloworld.c -o helloworld.i 头文件展开:不检查语法错误,即可以展开任意文件: 宏定义 ...

  7. Element ui 动态自定义表格单元格样式

    最终实现效果 在Element UI 的文档中提到了用cell-style 方法来自定义单元格样式: 具体使用方法: 1. 在el-table 标签中添加 cell-style 绑定的自定义方法 2. ...

  8. Python 版本管理工具选择与 Pyenv 使用说明

    Python 版本管理工具的主要作用是帮助开发者在同一台机器上管理多个 Python 版本和环境.这对于开发和部署不同项目非常有用,因为不同项目可能依赖不同的 Python 版本或者不同的包版本. 具 ...

  9. ASP.NET Core Library – ImageSharp

    前言 2021 年就写过一篇了, Asp.net core 学习笔记 Image processing (ImageSharp), 只是那时还是旧的写法, 这篇作为翻新和以后继续增加新功能的介绍. I ...

  10. Bit, Byte, ASCII, Unicode, UTF, Base64

    前言 做项目偶尔会接触到 stream 这个感念,不管是 memory stream 还是 file stream,它们又会提到 bytes. 还有像 Identity – 安全基础知识 中提到的 S ...