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

  • 13
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
Vue 3使用WebSocket,你可以按照以下步骤进行操作: 1. 首先,安装 `vue-native-websocket` 库,它可以简化与WebSocket的交互。打开终端并运行以下命令: ``` npm install vue-native-websocket ``` 2. 在Vue应用的入口文件(通常是 `main.js`)引入并安装 `vue-native-websocket`: ```javascript import VueNativeSock from 'vue-native-websocket'; Vue.use(VueNativeSock, 'ws://localhost:8080', { format: 'json', reconnection: true, }); ``` 这里的 `'ws://localhost:8080'` 是你要连接的WebSocket服务器的URL。你可以根据实际情况进行修改。 3. 在Vue组件使用WebSocket。在需要使用WebSocket的组件,你可以通过 `$socket` 属性来访问WebSocket实例。例如,你可以在 `created` 钩子函数创建WebSocket连接,并监听一些事件: ```javascript export default { created() { this.$socket.addEventListener('open', () => { console.log('WebSocket连接已打开'); }); this.$socket.addEventListener('message', event => { console.log('收到消息:', event.data); }); this.$socket.addEventListener('close', () => { console.log('WebSocket连接已关闭'); }); this.$socket.addEventListener('error', error => { console.error('WebSocket连接出错:', error); }); }, } ``` 4. 发送和接收消息。你可以使用 `$socket.send()` 方法发送消息到服务器,并且通过监听 `'message'` 事件接收服务器发送的消息。例如: ```javascript this.$socket.send('Hello, WebSocket!'); this.$socket.addEventListener('message', event => { console.log('收到消息:', event.data); }); ``` 这样就可以在Vue 3使用WebSocket了。记得根据实际情况修改WebSocket服务器的URL。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yusirxiaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值