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 = ''
    }

vue3中websocket用法相关推荐

  1. Vue watch监听详解,一篇文章彻底搞懂Vue2/Vue3中的watch监听

    watch监听在vue2和vue3中的用法详解(全) Vue2中的watch用法 Vue3中的watch用法 首先写一个vue页面 <template><div><h1& ...

  2. Vue3中TSX和h函数的用法

    Vue3中TSX的用法 补充:(jsx用法)[https://github.com/vuejs/babel-plugin-jsx] (vue3中渲染函数&JSX)[https://cn.vue ...

  3. 回顾Vue2 开启 Vue3 中的 watch 新用法

    前言 Vue 3.0出来之后,我一直在不断的尝试学习和接受新的概念.没办法,作为一个前端开发,并且也不是毕业于名校或就职于大厂,只有不断的培养学习能力,持之以恒的学习才能我这种普通前端开发者提高一丢丢 ...

  4. Vue3和element plus 中ref用法元素实例操作

    在 vue3 中,组件的逻辑可以放在 setup 函数里面,但是 setup 中不再有 this,所以 vue2 中的 this.$refs 的用法在 vue3 中无法使用. 用法是: element ...

  5. 剖析Vue3中setup()的用法(持续更新中)

    一.setup的特性及作用 可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是不建议这样写. Vue3 的一大 ...

  6. 【VideoJs】初识videojs video.js 视频播放器的基本使用 videojs基础用法 videojs视频播放器 vue3中使用videojs

    videojs介绍 免费,开源 插件多 可自定义 [推] 虽然,但是Videojs算好了,但我觉得有点杂,特别是文档与插件,且自定义插件有点困难,也可能是我比较菜吧 相比之下,我还是强烈推荐 [Xgp ...

  7. 前端之vue3使用WebSocket

    vue3使用WebSocket WebSocket WebSocket说明 WebSocket图示 客户端使用WebSocket vue3中, 客户端使用WebSocket步骤 更多方法 WebSoc ...

  8. 中input怎么接受后台传值_[vue3]如何在vue3中优雅地使用vmodel?

    Vue中的数据绑定 绑定数据有三种方式: 插值,也就是{{name}}的形式,以文本的形式和实例data中对应的属性进行绑定 v-bind v-model v-bind eg:v-bind:class ...

  9. vue3 中使用动画技术

    vue3 中使用动画技术 作者: jcLee95 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm=1001.21 ...

最新文章

  1. 特征驱动开发 Feature-Driven Development - FDD
  2. java构造函数的执行顺序,java构造函数和初始化函数的执行顺序
  3. idea2019.3.3不能热部署_复盘曼联2-1热刺:3大战术力助索肖自救,1人成“红魔”复苏关键...
  4. ECharts绘制中国地图、广西地图
  5. DelayQueue
  6. 名利双收的公益创业,“汇新杯”响应时代召唤助力公益创业
  7. 在quartus II15.0中调用Modelsim进行时序仿真时出现Rerun the EDA Netlist Writer的原因
  8. idea卸载不干净怎么办_Office卸载不干净怎么办?我想你一定需要Mac卸载Office的图文教程!...
  9. 家务计算机配置,笔记本电脑佳配置是什么样的
  10. 1.11.ARM的37个寄存器详解
  11. c++学习:多线程;顺序容器;智能指针
  12. 网易云获取带有时间轴的歌词
  13. 安装archlinux+cinnamon笔记
  14. 想要实验结果准确?玻璃器皿清洗方法和要点你可得知道!
  15. 电脑怎么下mcjava版_我的世界pc java下载
  16. python flash_Python Flask使用flash()方法
  17. JS实现简易ATM机
  18. Git(码云-开源中国)入门小知识
  19. ai作文批改_网易有道词典上线AI作文批改功能 可自动批改雅思、四六级英语作文...
  20. error#10052:could not checkout FLEXlm license

热门文章

  1. 51NOD 1212 无向图最小生成树
  2. 疯子的算法总结10--最小生成树Kruscal
  3. jQuery利用JSONP解决AJAX跨域请求
  4. Python函数式编程简介(三)匿名函数
  5. CSDN开播工具-嘉宾端使用说明
  6. 【Android 修炼手册】常用技术篇 -- 聊聊 Android 的打包
  7. 6月15日起,刷卡机不能自选商户了,这样会有多少卡被封掉?
  8. 董明珠炮轰国产车的创始人不开自己生产的车,事实果真如此吗?
  9. python默认安装地址_python多版本下设置python3为默认的方法
  10. 软件工程软件开发成本度量规范_软件开发成本度量方法