vue3中websocket用法

1.0 认识 websocket

#1.0.1 什么是 websocket

和 http 协议类似,websocket 也是是一个网络通信协议,是用来满足前后端数据通信的。

#1.0.2 websocket 相比于 HTTP 的优势

HTTP 协议:客户端与服务器建立通信连接之后,服务器端只能被动地响应客户端的请求,无法主动给客户端发送消息。

websocket 协议:客户端与服务器建立通信连接之后,服务器端可以主动给客户端推送消息了!!!

#1.0.3 websocket 主要的应用场景

需要服务端主动向客户端发送数据的场景,比如我们现在要做的智能聊天

#1.0.4 HTTP 协议和 websocket 协议对比图

1.1 vue3组合api中socket.io-client 的基本使用

#1.1.1 安装和配置 socket.io-client

参考 socket.io-client 的官方文档进行配置和使用

  1. 在项目中运行如下的命令,安装 websocket 客户端相关的包:

    npm i socket.io-client@4.0.0 -S# 如果 npm 无法成功安装 socket.io-client,可以尝试用 yarn 来装包
    # yarn add socket.io-client@4.0.0
    
  2. 在 xx.vue 组件中,从 socket.io-client 模块内按需导入 io 方法:

    // 按需导入 io 方法:调用 io('url') 方法,即可创建 websocket 连接的实例
    import { io } from 'socket.io-client'
    
  3. 事先setup中定义变量 socket,用来接收 io() 方法创建的 socket 实例:

    let socket = null
    

#1.1.2 创建和销毁 socket 实例

  1. 在 xx.vue 组件的setup onMounted生命周期函数中,创建 websocket 实例对象:

    onMounted(() => {// 创建客户端 websocket 的实例socket = io('ws://www.liulongbin.top:9999')
    })
    
  2. 在 xx.vue 组件的setup onBeforeUnmount生命周期函数中,关闭 websocket 连接销毁 websocket 实例对象

    // 组件被销毁之前,清空 sock 对象
    onBeforeUnmount(() => {// 关闭连接socket.close()// 销毁 websocket 实例对象socket = null
    })
    

#1.1.3 监听连接的建立和关闭

  1. 在 xx.vue 组件的setup  onMounted 生命周期函数中,调用 socket.on('connect', fn) 方法,可以监听到 socket 连接成功的事件:

    // 建立连接的事件
    socket.on('connect', () => console.log('connect: websocket 连接成功!'))
    
  2. 在 xx.vue 组件的 created 生命周期函数中,调用 socket.on('disconnect', fn) 方法,可以监听到 socket 连接关闭的事件:

    // 关闭连接的事件
    socket.on('disconnect', () => console.log('disconnect: websocket 连接关闭!'))
    

#1.1.4 接收服务器发送的消息

  1. 在 Chat.vue 组件的 setup  onMounted 生命周期函数中,调用 socket.on('message', fn) 方法,即可监听到服务器发送到客户端的消息:

    // 接收到消息的事件
    socket.on('message', msg => console.log(msg))
    
  2. 将服务器发送到客户端的消息,存储到 xx.vue 组件的 list 数组中:

    // 接收到消息的事件
    socket.on('message', msg => {// 把服务器发送过来的消息,存储到 list 数组中this.list.push({ name: 'xs', msg })
    })
    

#1.1.5 向服务器发送消息

  1. 客户端调用 socket.emit('send', '消息内容') 方法,即可向 websocket 服务器发送消息:

    // 提交按钮的点击事件处理函数
    const send = () => {// 如果输入的聊天内容为空,则 return 出去if (!this.word) return// 向服务器发送消息socket.emit('send', this.word)// 将用户填写的消息存储到 list 数组中this.list.push({ name: 'me', msg: this.word })// 清空文本框中的消息内容this.word = ''
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scanner类+Random

引用数据类型的使用 数据类型 变量名 new 数据类型(); 变量名.方法名(); import java.util.Scanner; publicclass ScannerDemo01 { publicstaticvoid main(String[] args) { //创建Scanner引用类型的变量 Scanner sc new Scanner(System.in); //获取数字 System.out.print…

webpack入门进阶调优第一章

1.1何为Webpack webpack是开源的JS模块打包工具 核心功能是解决模块之间的依赖,吧哥哥模块按照特定的规则和顺序组织在一起,最终合并为一个JS文件。这个过程叫模块打包 1.2为何需要Webpack 1.2.1何为模块 在设计程序结构时,更好的组织方…

python类的空间问题及类之间的关系

类的空间问题及类之间的关系 类的空间问题 1.何处可以添加对象属性 class A:def __init__(self,name):self.name namedef func(self,sex):self.sex sexobj A("alex") obj.age 18 # 通过__init__方法添加 print(obj.__dict__) obj1 A("wusir") obj.fun…

麻省理工学生发明 震惊世界

核心提示:在普拉纳夫看来,数字信息以像素的形式被限制在显示屏幕之中。他发明的"第六感装置"震惊全场,让世界为之惊叹。 MIT(麻省理工)印度裔学生Prarnav Mistry的天才发明:“第六感装置” 视频地址:http://v.youku.com…

Java生鲜电商平台-优惠券系统的架构设计与源码解析

Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统、采购系统、仓储系统、订单系统、促销系统、维权系统、财务系统、会员系统、权限系统等,各系统之间相互关联、相互依托,为前端的正…

VC 2010下安装OpenCV2.4.4

说明: 安装平台:32位XP,VS2010;OpenCV 2.4.4不支持VC 6.0;网上有很多用CMake编译OpenCV的安装教程,这里建议先不要自己编译,如果使用预编译好的库有问题,再尝试自己编译。希望大家好…

vue3源码中的最长递增子序列

求解最长递增子序列是一道经典的算法题, 多数解法是使用动态规划的思想,算法的时间复杂度是O(); 而Vue.js内部使用的是维基百科提供的一套“贪心二分查找”的算法; 贪心算法的时间复杂度是O(n),二分查找的时间复杂度是O(logn),总时间复杂度…

Java编程基础阶段笔记 day04 Java基础语法(下)

​ 面向对象编程 笔记Notes 面向对象三条学习主线 面向过程 VS 面向对象 类和对象 创建对象例子 面向对象的内存分析 类的属性:成员变量 成员变量 VS 局部变量 类的方法 方法的重载 可变个数形参 面向对象:封装性 访问权限修饰符 构造方法&…

汉诺塔递归算法

起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子…

Java编程基础阶段笔记 day 07 面向对象编程(上)

​ 面向对象编程 笔记Notes 面向对象三条学习主线 面向过程 VS 面向对象 类和对象 创建对象例子 面向对象的内存分析 类的属性:成员变量 成员变量 VS 局部变量 类的方法 方法的重载 可变个数形参 面向对象:封装性 访问权限修饰符 构造方法&…

Vue/Angular中父窗口新开的子窗口关闭的时候刷新父窗口

最近遇到一个项目需求:Angular中父窗口新开的子窗口提交完信息关闭的时候刷新父窗口。 知识点: window.opener 概述 返回打开当前窗口的那个窗口的引用,例如:在window A中打开了window B,B.opener 返回 A. 语法 …

HDU 6631 line symmetric(枚举)

首先能想到的是至少有一对相邻点或者中间间隔一个点的点对满足轴对称,那么接下来只需要枚举剩下的点对是否满足至多移动一个点可以满足要求。 第一种情况,对于所有点对都满足要求,那么Yes。 第二种情况,有一个点不满足要求&#x…

学习数字图像处理经验谈

一、面向应用:层层分解、抓住要点 我们学习数字图像处理的最终目的还是应用,不管是用它来研制产品还是研发项目抑或是研究课题,都要用数字图像处理的理论、方法和技术来解决实际问题。在此过程中,提高效率是非常重要的&#xff0c…

react-router-dom@6获取路由传参

目录 参数获取 1、子路由形式携带 2、问号(?)形式参数 3、事件跳转传参 router/index.tsx import App from "App"; import Home from "pages/Home"; import List from "pages/List"; import Detail from "pages/Detail"; import…

koa洋葱模型

Koa 和 Express 都会使用到中间件 Express的中间件是顺序执行,从第一个中间件执行到最后一个中间件,发出响应如上图 Koa是从第一个中间件开始执行,遇到 next 进入下一个中间件,一直执行到最后一个中间件,在逆序&#x…

koa后端允许跨域

举个例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-width…

python面向对象之继承

面向对象之继承 什么是面向对象的继承&#xff1f; 继承&#xff08;英语&#xff1a;inheritance&#xff09;是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B&#xff0c;就把这个A称 为“B的子类别”&#xff0c;而把B称为“A的父类别”也可以称“B是…

美国正面临“人才泡沫”破裂危机?

&#xff08;Jason Lane和Kevin Kinser/文&#xff09;最近&#xff0c;与教育有关的种种问题在美国社会引起了广泛讨论。首先巨额的学生贷款问题&#xff1a;根据美联储纽约分行在2012年11月发布的一份报告&#xff0c;全美学生贷款总额已经达到420亿美元&#xff0c;其中新增…

ngrx学习笔记

什么是ngrx ngrx是Angular基于Rxjs的状态管理&#xff0c;保存了Redux的核心概念&#xff0c;并使用RxJs扩展的Redux实现。使用Observable来简化监听事件和订阅等操作。 在看这篇文章之前&#xff0c;已经假设你已了解rxjs和redux。 有条件的话请查看官方文档进行学习理解。 所…

.slice(0)

高手代码里看到.slice(0)&#xff0c;查了下这样写的好处&#xff1a; 1.对原数组进行深拷贝&#xff0c;这样进行一系列操作的时候就不影响原数组了&#xff1b; 2.将类数组对象转化为真正的数组对象&#xff1a;var anchorArray [].slice.call(document.getElementsByTagN…