vue2.x 使用 socket 数据交互

简单封装 socket

  1. //生成唯一标识符
  2. function getUuid {
  3. let s = [];
  4. let hexDigits = "0123456789abcdef";
  5. for (let i = 0; i < 36; i++) {
  6. s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  7. }
  8. s[14] = "4";
  9. s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
  10. s[8] = s[13] = s[18] = s[23] = "-";
  11. return s.join("");
  12. };
  13. class socketClient {
  14. wsUrl = "";
  15. wsAuto = {};
  16. websocket = null;
  17. constructor(wsUrl, wsAuto) {
  18. this.wsUrl = wsUrl;
  19. this.wsAuto = wsAuto;
  20. }
  21. // 初始化socket
  22. initWebSocket() {
  23. this.websocket = new WebSocket(this.wsUrl);
  24. console.log("========= create websocket ===========");
  25. this.wsOpen().then((res) => {
  26. console.log("========= onopen websocket ===========", res);
  27. this.wsSend(this.wsAuto);
  28. console.log("========= 授权完成 ===========");
  29. });
  30. this.websocket.onerror = (evt) => {
  31. console.log("========= 连接错误 ===========", evt);
  32. };
  33. this.websocket.onclose = (evt) => {
  34. console.log("========= 客户端断开连接 ===========", evt);
  35. };
  36. }
  37. // 打开连接
  38. wsOpen() {
  39. if (this.websocket) {
  40. return new Promise((resolve, reject) => {
  41. try {
  42. this.websocket.onopen = (evt) => {
  43. resolve(evt);
  44. };
  45. } catch (err) {
  46. reject(err);
  47. }
  48. });
  49. }
  50. }
  51. // 关闭连接
  52. wsClose() {
  53. if (this.websocket) {
  54. this.websocket.close();
  55. return new Promise((resolve, reject) => {
  56. try {
  57. this.websocket.onclose = (evt) => {
  58. console.log("========= 客户端断开连接 ===========", evt);
  59. resolve(evt);
  60. };
  61. } catch (err) {
  62. reject(err);
  63. }
  64. });
  65. }
  66. }
  67. // 监听消息
  68. wsMessage(callback) {
  69. // 需要监听的消息路径
  70. if (this.websocket) {
  71. try {
  72. this.websocket.onmessage = (evt) => {
  73. // 判断是否有 data 数据
  74. if (evt.data) {
  75. let data = evt.data;
  76. if (this.isJsonString(data)) {
  77. callback(JSON.parse(data));
  78. }
  79. }
  80. };
  81. } catch (err) {
  82. callback(err);
  83. }
  84. }
  85. }
  86. // 发送消息
  87. wsSend(options, isFile = false) {
  88. if (this.websocket) {
  89. try {
  90. if (isFile) {
  91. let params = { ...options };
  92. params.RequestId = getUuid();
  93. this.websocket.send(params);
  94. } else {
  95. this.websocket.send(JSON.stringify(options));
  96. }
  97. } catch (e) {
  98. console.log('错误', e)
  99. }
  100. }
  101. }
  102. // 连接因错误而关闭时触发
  103. wsOnerror() {
  104. if (this.websocket) {
  105. return new Promise((resolve, reject) => {
  106. try {
  107. this.websocket.onerror = (evt) => {
  108. resolve(evt);
  109. };
  110. } catch (err) {
  111. reject(err);
  112. }
  113. });
  114. }
  115. }
  116. // 判断是否是json字符串
  117. isJsonString(str) {
  118. try {
  119. if (typeof JSON.parse(str) == "object") {
  120. return true;
  121. }
  122. } catch (e) {
  123. console.log("isJsonString:错误捕获");
  124. }
  125. return false;
  126. }
  127. }
  128. export { socketClient };

在 main.js 上引用

  1. // ********** socket **********
  2. import { socketClient } from "./utils/socket";
  3. // 初始化 socket
  4. const ws_wyf_url = "ws://xxx.xxx.xxx.xxx:8080/conn?u=123ad";
  5. const wsAuto = {
  6. appId: "xxxx",
  7. appSecret: "xxxxxxx"
  8. };
  9. const wsocket = new socketClient(ws_wyf_url, wsAuto);
  10. wsocket.initWebSocket();
  11. Vue.prototype.$ws = wsocket;

vue2.x 组件使用

  1. <script>
  2. created() {
  3. // 监听消息
  4. this.$ws.wsMessage((res) => {
  5. console.log(res)
  6. });
  7. },
  8. // 发送消息
  9. let parm = {
  10. name:"asd"
  11. }
  12. this.$ws.wsSend(patm);
  13. </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. 想不到WhaleStudio和Talend的差异竟如此之大!

    最近我们遇到很多客户需求是把Talend迁移到WhaleStudio,主要是发现WhaleStudio支持的数据源多很多,从各个版本的SAP到AWS Redshift,S3,从MangoDB CDC到 ...

  2. spring创建 JavaWeb

  3. STM32F3, STM32F4编程手册

    1. Cortex-M4的内核设备 NVIC, Nested vectored interrupt controller SCB, System control block SysTick, The ...

  4. ARM架构及ARM指令集、Thumb指令集你了解多少?

    https://www.sohu.com/a/339622340_100281310 1991 年ARM 公司成立于英国剑桥,在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业.在 ...

  5. Linux驱动|cdev_init、cdev_alloc区别

    这两个函数是字符设备初始化相关的内核函数. 要想了解这两个函数,必须要知道字符设备的架构,以及字符设备创建的流程. 关于字符设备可以参考下面这篇文章 <手把手教Linux驱动3-之字符设备架构详 ...

  6. PHP中的Malformed UTF-8 characters错误解决

    在PHP开发中,开发者经常会遇到Malformed UTF-8 characters错误.这个错误通常是由于代码中存在无效的UTF-8字符而引起的.本篇博客将为您介绍如何解决这个问题. 什么是UTF- ...

  7. hass安装tileboard详细

    首先下载tileboard https://github.com/resoai/TileBoard/releases/download/v2.10.2/TileBoard.zip 下载之后前往hass ...

  8. Java 1.8 Stream流原理与用法总结

    一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...

  9. Seata 核心源码详解

    参考文章: 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www.cnblo ...

  10. Redisson 源码分析及实际应用场景之实现延迟队列

    redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...