Vue3(2):Vue3使用socket.io

25 篇文章 0 订阅
1 篇文章 0 订阅

Vue3使用socket.io

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

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

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);

新建 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;

Vue3 使用 socket.io

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

Vue.socket.io 的 使用方法

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

我的 Vue.socket.io

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

使用方法

下载依赖

npm install vue-socket-kevin.io

修改 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',
});

修改 App.vue

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

<script setup>
import { inject ,onMounted } from 'vue';
const socket = inject('socket');
onBeforeMount(() => {
    socket.subscribe('connect',()=>{
        console.log('you are connect')
    })
})
</script>

效果

在这里插入图片描述
看到 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>

结果

在这里插入图片描述

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

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

例外

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

这里提供两个大佬写的有关于 egg.jsVue3websocket

Vue3的websocket

eggjs的websocket

更新

暂无

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值