egg.socket.io后端开发

1. 安装egg-socket.io

npm i egg-socket.io@4.1.6 --save

最好指定egg-socket.io的版本号,比如我后端使用"egg-socket.io": "^4.1.6", 因为跟前端的socket.io-client是一一关联,socket.io-client用高版本或低版本,都不兼容了,可以查看egg-socket.io的依赖文件,比如在node_modules中可以看到客户端socket.io-client使用的版本号:

比如我前端安装依赖:

"socket.io-client": "^2.5.0",

2. config/plugin.js引入

io: {
        enable: true,
        package: 'egg-socket.io',
    },

 

3.配置socket.js

/config/config/socket.js

module.exports = config => {
    // socket.io
    config.io = {
        init: {
            wsEngine: 'ws', //ws 引擎
        },
        namespace: {
            '/': {
              connectionMiddleware: [
                //'auth', 连接中间件
              ],
              packetMiddleware: [],
            }
        },
        redis: {
            host: '127.0.0.1',
            port: 6379,
            auth_pass: '',
            db: 2,
        },
    }
}

4.在config.default.js引入

require('./config/socket')(config)//socket.io

5.使用路由,

/router/platform.js

'use strict';

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

  //测试 这里的'test'跟前端的路由要保持一致
  io.of('/').route('test', io.controller.test.test)

  io.of('/').route('connenct',io.controller.notice.connenct)

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

};

6.先来看下egg-socket.io的项目目录结构

your-project-name
├── app
│   ├── extend
│   │   └── helper.js
│   ├── io
│   │   ├── controller
│   │   │   └── chat.js
│   │   └── middleware #插件中间件, 基于 socket 模型设计,处理 socket.io 请求 
│   │       ├── auth.js #对应刚才配置的connectionMiddleware: ['auth']
│   └── router.js
├── config
└── package.json

在app目录下新建io文件夹,io下新建controller

'use strict';

const Controller = require('egg-cloud').Controller;

/**
 * 测试socket
 */

class TestController extends Controller {

    async test() {
        const { ctx, app } = this;

        //测试连接 控制台自动输出
        //console.log("-------test--------")

        //前端传过来的参数
        let message = ctx.args[0];

        console.log(message);
    }

}

module.exports = TestController;

8. 使用知识

使用 emit() 方法发送事件: 通常用在后端,触发给前端,前端用on()接收

使用 on() 方法监听事件: 通常用在前端

9. 比如这里的路由是

//测试 这里的'test'跟前端的路由要保持一致
  io.of('/').route('test', io.controller.test.test)

10. 在前端怎么写呢?

actions: {
        //连接socket
        connectSocket({ state, dispatch }) {
            const S = io('http://127.0.0.1:7001', {
                query: {},//可以传token参数
                transports: ['websocket'],
                timeout: 5000
            })
            //监听连接
            S.on('connect', () => {
                console.log("socket.io已连接")

                //测试推送一条消息
                S.emit('test', '123456')/触发给后端
                
            })
            //监听失败
            S.on('error', () => {
                state.socket = null
            })
            //监听断开
            S.on('disconnect', () => {
                state.socket = null
            })
        }
    }

后端的controller方法的test 就能收到

async test() {
        const { ctx, app } = this;

        //测试连接 控制台自动输出
        //console.log("-------test--------")

        //前端传过来的参数
        let message = ctx.args[0];

        console.log(message);
    }

相关推荐

  1. 开发辅助

    2024-05-14 16:32:07       41 阅读
  2. 开发教程

    2024-05-14 16:32:07       31 阅读
  3. 开发大纲

    2024-05-14 16:32:07       34 阅读
  4. 开发面试题

    2024-05-14 16:32:07       63 阅读
  5. 开发笔记20240106

    2024-05-14 16:32:07       55 阅读
  6. 开发笔记20240117

    2024-05-14 16:32:07       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 16:32:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 16:32:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 16:32:07       82 阅读
  4. Python语言-面向对象

    2024-05-14 16:32:07       91 阅读

热门阅读

  1. 前端 日期 new Date 少0 转换成 yyyy-MM-dd js vue

    2024-05-14 16:32:07       33 阅读
  2. Kubernetes(k8s)的Network Policies解析

    2024-05-14 16:32:07       27 阅读
  3. 实用的chrome命令

    2024-05-14 16:32:07       25 阅读
  4. js通过视频链接获取视频时长

    2024-05-14 16:32:07       38 阅读
  5. Python实战开发及案例分析(20)—— 宽度优先

    2024-05-14 16:32:07       35 阅读
  6. 【前端每日一题】day5

    2024-05-14 16:32:07       37 阅读
  7. GNU/Linux - 是否可以多次打开同一个设备文件

    2024-05-14 16:32:07       29 阅读
  8. LeetCode-hot100题解—Day7

    2024-05-14 16:32:07       36 阅读
  9. 机器学习【简述】

    2024-05-14 16:32:07       31 阅读
  10. 【TypeScript声明合并简介以及使用方法】

    2024-05-14 16:32:07       39 阅读
  11. 【C++】字符串出现次数

    2024-05-14 16:32:07       31 阅读