IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> js 封装websocket -> 正文阅读

[网络协议]js 封装websocket

前言

Websocket是一种用于在服务器和客户端之间实现高效的双向通信的机制,通过WebSocket,其目的是在应用服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。

WebSocket相关

1. 构造函数

WebSocket(url,protocols)构造函器会返回一个 WebSocket 对象。

url指WebSocket服务器将响应的URL。
protocols可选字段,代表选择的子协议。

2. 常用属性

  • WebSocket.url是一个只读属性,对应构造函数创建WebSocket实例对象时的URL
  • WebSocket.readyState返回当前WebSocket 的链接状态,只读。对应值为整型,如下:
    • 0 (WebSocket.CONNECTING) 正在链接中
    • 1 (WebSocket.OPEN) 已经链接并且可以通讯
    • 2 (WebSocket.CLOSING) 连接正在关闭
    • 3 (WebSocket.CLOSED) 连接已关闭或者没有链接成功
  • WebSocket.onopen属性定义建立连接并可以通讯时触发的回调函数,也就是readyState 变为1时调用;
  • WebSocket.onmessage该属性定义一个当收到来自服务器的消息时触发的回调函数。
  • WebSocket.onerror定义一个发生错误时执行的回调函数,此事件的事件名为"error"。
  • WebSocket.onclose属性返回一个事件监听器,这个事件监听器将在 WebSocket 连接的readyState 变为3时被调用。

websocket封装

websocket.js代码如下:

/* websocket.js */
// 判断字符串是否是JSON格式
function isJSON(str) {
  if (typeof str === 'string') {
    try {
      const obj = JSON.parse(str);
      if (typeof obj === 'object' && obj) {
        return true;
      }
      return false;
    } catch (e) {
      console.log('error:' + str + '!!!' + e);
      return false;
    }
  }
  return false;
}
class Socket {
  /**
   * 构造函数
   * @param {object} params 构造函数参数
   */
  constructor(params) {
    window.WebSocket = window.WebSocket || window.MozWebSocket;
    if (!window.WebSocket) { // 检测浏览器支持
      console.error('错误: 浏览器不支持websocket');
      return;
    }
    this.websocket = null;
    this.params = params;
    this.socketInit(params);
  }

  /**
   * 初始化socket
   * @param {string}   url     WebSocket服务器将响应的URL,必传。
   * @param {function} onopen  open事件的回调函数
   * @param {function} onclose close事件的回调函数
   * @param {function} onerror error事件的回调函数
   * @param {function} onclose close事件的回调函数
   */
  socketInit({
    url, onopen, onmessage, onerror, onclose,
  }) {
    if (url !== undefined) {
      this.websocket = new WebSocket(url);
      // 用于指定连接成功后的回调函数。
      this.websocket.onopen = (e) => {
        console.log('连接成功', e);
        if (typeof onopen === 'function') {
          onopen(e);
        }
      };
      // 用于指定当从服务器接受到信息时的回调函数。
      this.websocket.onmessage = (e) => {
        console.log('接收数据', e);
        if (typeof onmessage === 'function') {
          const res = isJSON(e.data) ? JSON.parse(e.data) : e.data;
          onmessage(res);
        }
      };
      // 用于指定连接关闭后的回调函数。
      this.websocket.onclose = (e) => {
        console.log('连接关闭', e);
        if (typeof onclose === 'function') {
          onclose(e);
        }
      };
      // 用于指定连接失败后的回调函数。
      this.websocket.onerror = (e) => {
        console.log('连接异常', e);
        if (typeof onerror === 'function') {
          onerror(e);
        }
      };
    }
  }

  // 发送消息
  send(message) {
    // readyState 1 表示已经链接并且可以通讯
    if (!this.websocket || this.websocket.readyState !== 1) {
      console.log('请确认websocket是否已经链接并且可以通讯');
      return;
    }
    this.websocket.send(JSON.stringify(message));
  }

  // 手动关闭socket
  close() {
    if (!this.websocket) {
      console.log('websocket 不可用');
      return;
    }
    this.websocket.close();
  }
}
export default Socket;

使用方式

代码如下(示例):

import Socket from '@/utils/websocket';

let websocket;
const params = {
  url: 'ws://127.0.0.1:8081',
  onopen: () => {
  	// 建立连接时发送相关数据 
  	const token = "xxxx"
  	websocket.send(token);
  },
  onmessage: (res) => {
    // 接收数据后的业务代码
  },
  onclose: () => {
    // 连接关闭时触发的回调函数
  },
};
websocket = new Socket(params);

业务处理完可以手动关闭连接

websocket.close();
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:35:20  更:2021-07-22 14:36:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:44:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码