封装socket 到vue2.x 使用
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 使用的更多相关文章
- 封装Socket.BeginReceive/EndReceive支持Timeout简介
.NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特性,在需考虑程 ...
- 封装Socket.BeginReceive/EndReceive以支持Timeout
Socket .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特 ...
- 基于事件驱动的前端通信框架(封装socket.io)
socket.io的使用可以很轻松的实现websockets,兼容所有浏览器,提供实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验.但是在使用socket.io的过程中,由于业务需求需要同 ...
- [ActionScript 3.0] AS3.0 简单封装Socket的通信
Socket服务器 package com.controls.socket { import com.models.events.AppEvent; import com.models.events. ...
- Tomcat原理系列之六:详解socket如何封装成request(上)
目录 参与者 总结 @(详解socket如何封装成request) 看源码虽然不能马上提升你的编码水平.但能让你更好的理解编程. 因为我们tomcat多是以NIO形式处理请求,所以本系列讲的都是NIO ...
- 试解析Tomcat运行原理(一)--- socket通讯
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
- socket 通信
type TWinSocketStringStream = class(TWinSocketStream) public function ReadString(nMaxLength: Integer ...
- C# Socket系列二 简单的创建 socket 通信
看了系列一 我们开启了对socket tcp的监听状态,那么这一章我们来讲解怎么创建socket的通信代码 我新建一个类 TSocketBase public abstract class TSock ...
- python_way ,day9 socket 和soctet多线程的使用
1.socket的基础 tcp/ip tcp ip 协议是主机接入互联网以及接入互联网互联两台主机通信互联标准 物理层:传输二进制 链路层:对二进制数进行分组 ,唯一标示一台主机 ...
- 面向连接的Socket Server的简单实现(简明易懂)
一.基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果. 这经常涉及到如果管理多个连接及如何 ...
随机推荐
- 3.2.0 版本预告!远程日志解决 Worker 故障获取不到日志的问题
Apache DolphinScheduler 3.2.0 版本已经呼之欲出,8 月 中下旬,这个大版本就要和用户见面了.为了让大家提前了解到此版本更新的主要内容,我们已经制作了几期视频和内容做了大致 ...
- React 高德地图 进京证 路线规划 问题小记
一.加载问题 用高德地图做了个进京证路线规划的功能,官网也是有 React 代码示例.但是吧,这个Demo有问题,地图是能加载成功,但是其他功能再用 map 这个变量肯定不行,果不其然是null,处理 ...
- JAVA学习——JDK开发环境配置
2024/07/08 一.JDK下载 二.安装与JDK开发环境配置(Windows) 三.安装与JDK开发环境配置(Linux) 一.JDK下载与安装 网址: https://www.oracle.c ...
- zabbix4.0配置短信报警
1.准备工作 #访问短信网址:172.16.98.1,网线插LAN口 #账号&密码:admin 安装ubuntu系统模拟http请求工具(命令行模式) # apt-get install ht ...
- Prism:框架介绍与安装
Prism:框架介绍与安装 什么是Prism? Prism是一个用于在 WPF.Xamarin Form.Uno 平台和 WinUI 中构建松散耦合.可维护和可测试的 XAML 应用程序框架 Gith ...
- 即构音视频 Express Flutter SDK 全面支持空安全
Flutter 是一套移动 UI 框架,可以快速在 iOS.Android 上构建高质量的原生用户界面.作为其官方语言 Dart 是类型安全的,当开发者获取变量的时候,编译器可以保证变量的类型,但类型 ...
- 使用Hexo主题搭建个人博客(markdown)
依赖环境 安装node.js:node.js下载可以从其官方界面开始https://nodejs.org/zh-cn/ 安装git:git下载则可以从其官方界面开始https://git-scm.co ...
- ST-SSL: 用于交通流量预测的时空自监督学习《Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction》(交通流量预测、时空异质性、自监督、数据增强)
2023年10月23日,继续论文,好困,想发疯. 论文:Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction Git ...
- ASP.NET Core – DateTime, DateTimeOffset, DateOnly, TimeOnly, TimeSpan, TimeZone, NodaTime 使用基础
前言 心血来潮,这篇讲点基础的东西. 对日期和时区 timezone 不熟悉的读者,请先看这篇 Time Zone, Leap Year, Date Format, Epoch Time 时区, 闰年 ...
- Stooges – AI 孙燕姿
很久没有写文章了... 最近听了 AI 孙燕姿 的一首歌 <一场游戏一场梦>, 有感而发. 所以特别写一篇记入一下我的这半年很火的 AI 的想法.