首页 > 其他分享 >使用egg-socket.io 搭建socket 服务

使用egg-socket.io 搭建socket 服务

时间:2023-04-17 17:34:24浏览次数:35  
标签:vue const socket app server io egg

1.后台

安装 egg-socket.io
npm i egg-socket.io --save

开启插件

// {app_root}/config/plugin.js
exports.io = {
  enable: true,
  package: 'egg-socket.io',
};

配置

// {app_root}/config/config.${env}.js
exports.io = {
  init: { }, // passed to engine.io
  namespace: {
    '/': {
      connectionMiddleware: [中间件],
      packetMiddleware: [中间件],
    },
    '/example': {
      connectionMiddleware: [],
      packetMiddleware: [],
    },
  },
};

namespace 是指分配到不同的接入点或者路径,前端链接socket时需要和此保持一致

io(http://127.0.0.1:7001{namespace})

connectionMiddleware 在每一个客户端链接或者退出时发生作用,socket链接先走的中间件,可以在这里处理授权认证,链接处理等操作

packetMiddleware 作用于数据包(每一条消息),通常对消息进行预处理(信息加密)

路由
// {app_root}/app/router.js

module.exports = app => {
  const { router, controller, io } = app;

  // default
  router.get('/', controller.home.index);

  // socket.io
  io.of('/').route('server', io.controller.home.server);
};

对于在命名空间"/" 下,监听到的serve事件将由 app/io/controller/home 中 server 方法处理
server 方法可以前端可以通过调用 socket.emit('server',{name:'jjj'}),可以将数据传递到app/io/controller/home 中 server 方法中进行处理

//后台 server方法 
 async server() {
    const { ctx, app } = this;
    const nsp = app.io.of('/');
    const message = ctx.args[0] || {};
    const socket = ctx.socket;
    const client = socket.id;
   await nsp.emit('server',{age:12})
  }

2.前端

前端使用vue 框架,需要vue-socket.io 插件

安装vue-socket.io

npm install vue-socket.io --save

在入口文件main.js中使用插件,并建立socket链接
import VueSocket from 'vue-socket.io'
Vue.use(new VueSocket({
  debug:true,
  connection:'http://127.0.0.1:7001/', // namespace --> /
}))

在组件中调用方法

// 前端代码
 this.$socket.emit('server',{name:'jjj'})

前端emit 数据,后台返回结果这样我们就能在浏览器上看到返回的数据

 

标签:vue,const,socket,app,server,io,egg
From: https://www.cnblogs.com/luoguixin/p/17326534.html

相关文章

  • [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
    变量定义回忆上次内容上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力编程语言的基础都是变量声明python是如何声明变量的呢?变量想要定义变量首先明确什么是变量变量就是数值能变的量英文名称variable计算机在内存中分配出空间用来存储这些能变的量那......
  • VMware提示Sorry, this application cannot run under a Virtual Machine
    意思是对不起,这个程序不能在虚拟环境下运行!在虚拟机文件里找到WindowsXPProfessional.vmx(不是安装目录)用记事本打开,在文本末尾加入一行monitor_control.restrict_backdoor="TRUE"保存文件现在启动虚拟机  就不会被Themida检测到了......
  • Redis_大白话谈IO模型
    通俗理解多种IO模型前言我们以故事来讲我们经常遇到的多种IO模型,首先故事的情节是老李去买火车票,三天后买到一张退票,其中往返车站耗时1小时。里面主要包含的人员有:老李,黄牛,售票员,快递员多种IO模型阻塞IO模型老李去火车站买票,排了三天队买到一张退票耗费:在火车站等了三......
  • Java8新特性6_Optional容器类
    Optional类概念Optional类是一个容器类,代表一个值存在或者不存在,原来null表示一个值不存在,现在Optional可以更好的表达这个概念,并且可以规避空指针异常常用方法Optional.of:创建一个Optional实例Optional.empty:创建一个空的Optional实例Optional.ofNullable:若t不为null......
  • org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    1.问题org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound)Springboot项目中,在mybatis中mapper数据库操作接口(有的称DAO,有的直接说mapper,都只同一文件)与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了......
  • Visual Studio编译和使用wxWidgets
    一、下载到官网:https://www.wxwidgets.org/官网会引导跳到github:https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.2github有很多个下载链接,有代码(source)和预编译包(binary),后者又分开发版(dev)和发布版(release)预编译包的VC版本和VS版本对应如下:*vc14x兼容20......
  • cookie和session
    (一)cookie和session原理及区别cookie采用的是客户端的会话状态的一种储存机制。它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。session是一种服务器端的信息管理机制,它把这些文件信息以文件的形式存放在服务器的硬盘空间上(这是......
  • IOS Swift WKWebView使用以及与JS交互
    一、SwiftWKWebView使用1、加载百度网站打开xcode,在最上方工具栏新建project注意要选Storyboard工程建好后 ViewController.swift 这个文件是编写主视图文件,改成下面importUIKitimportWebKitclassViewController:UIViewController,WKUIDelegate{varwebView:WKWe......
  • DNS Checker - DNS Check Propagation Tool
    DNSChecker-DNSCheckPropagationToolDNSPropagationChecker-HowtoCheckDNSPropagationGloballyDNSCheckerprovidesafreeonlineDNSCheckertooltocheckDNSpropagationglobally.ThetoolcheckstheDNSdataofanyhostnameordomainfromthe......
  • axios
    axios使用参考:http://www.axios-js.com/zh-cn/docs/index.html#axios-API定时:https://blog.csdn.net/weixin_43574035/article/details/126233221......