码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vue3(2):Vue3使用socket.io


    Vue3使用socket.io

    今天想使用 eggjs 和 vue3 搭建一个简单地聊天平台,发现普遍用的是 socket.io (其实是 eggjs 的 websocket 在 github 第一个项目就是 socket.io) ,而且 socket.io 和 websocket 并不相通

    socket.io 和 wesocket 有点区别,区别大家可以点击下边连接了解下

    websocket和socket.io区别

    eggjs使用 socket.io

    socket.io的GitHub

    这边写个简单demo,以后如果有时间会写个聊天系统出来

    修改 router.js 文件,添加 socket.io

    // router.js
    const { router, controller, middleware, io } = app;
    // 订阅chat
    io.of('/').route('chat', controller.chat.onChat);
    
    • 1
    • 2
    • 3
    • 4

    新建 app=>controller => chat.js

    一个很简单的 demo ,主要就是收到 chat 的信息返回给 res

    'use strict';
    
    const Controller = require('egg').Controller;
    
    class ChatController extends Controller {
      async onChat(res) {
        const { ctx } = this;
        const { id } = ctx.socket;
        const message = this.ctx.args[0];
        // 发送个 res
        await this.ctx.socket.emit('res', `Hi! I've got your message: ${message}`);
      }
    }
    module.exports = ChatController;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Vue3 使用 socket.io

    然后发现 Vue3 也有个 socket.io ,然后发现 socket.io 虽然已经适配了 Vue3 但是用了就报错…

    Vue.socket.io 的 使用方法

    然后我去下载代码,然后自己也 folk 了一个版本

    我的 Vue.socket.io

    现在就可以直接用了,我把代码改成通过 inject 和 provide 的注入实现

    使用方法

    下载依赖

    npm install vue-socket-kevin.io
    
    • 1

    修改 main.js

    import VueSocketIO from 'vue-socket-kevin.io';
    
    const socket = new VueSocketIO({
      debug: true,
      // 方法可以参考 https://github.com/MetinSeylan/Vue-Socket.io
      connection: 'http://127.0.0.1:7001',
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改 App.vue

    由于使用的是 inject 和 provide ,所以必须在 数据初始化后使用 , 也就是 onBeforeMount后使用

    <script setup>
    import { inject ,onMounted } from 'vue';
    const socket = inject('socket');
    onBeforeMount(() => {
        socket.subscribe('connect',()=>{
            console.log('you are connect')
        })
    })
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果

    在这里插入图片描述
    看到 you are connect 证明已经连接成功 ,

    然后我们写的发送的代码

    修改 App.vue

    <script setup>
    import { inject ,onBeforeMount , onMounted } from 'vue';
    const socket = inject('socket');
    onBeforeMount(() => {
        socket.subscribe('connect',()=>{
            console.log('you are connect')
        })
        // 消息订阅
        socket.subscribe('res',(data)=>{
            console.log('我收到你的消息啦!!',data)
        })
    });
    onMounted(()=>{
       // 上面说个 我们发送 chat 的信息频道,后台就会放回 res 频道的信息给我们
        socket.emit("chat","good")
    })
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果

    在这里插入图片描述

    这样就代表成功了,具体的 api 还是查看 Vue.socket.io 的 使用方法

    如果有问题可以直接私聊或者通过信息回复我

    例外

    其实 Vue3 和 egg.js 也有 websocket,但是其实如果你去查看源码,会发现 websocket插件 其实就是简单通过 js 的 websocket 和 发布订阅模式 去实现的

    这里提供两个大佬写的有关于 egg.js 和 Vue3 的 websocket

    Vue3的websocket

    eggjs的websocket

    更新

    暂无

  • 相关阅读:
    发UPS国际快递到墨西哥的收费标准
    站在健康保障行业拐点,轻松集团如何“无界开元”?
    开学季&河科大社区活动详情介绍实例
    【Leetcode】 131. 分割回文串
    清华大学YOLOv10公版目标检测算法在地平线Bayes架构神经网络加速单元BPU上部署参考—— 以RDK Ultra为例
    跨平台编译qtkeychain、安装qtkeychain(Windows、Linux、MacOS环境下编译与安装)
    敏感型人格的特征,怎么改变敏感型性格?
    linux——(4)磁盘与文件系统管理
    Mysql---子查询的三种查询方式( 表子查询,条件子查询,列中子查询)
    安卓可视大屏寻呼台 兼容标准sip协议
  • 原文地址:https://blog.csdn.net/weixin_38992765/article/details/127838330
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号