React 前端导航

升级 egg-socket.io 到 4.4.0

升级 egg-socket.io 到 4.4.0

阿里这个框架已经很久没更新了,连插件模块都没有人维护。本来想着用 egg-socket.io 的 2.1.1 版本就行了,但是用起来发现很多的 api 都用不了了,于是有了升级的想法,重写配置。

本文记录了升级及修改配置的步骤供大家参考。

升级包

npm uninstall socket.io redis-adapter redis
npm install socket.io@4.4.0 @socket.io/redis-adapter@7.1.0 ioredis --save

就这么简单,因为从 redis 的适配器更名了,既然用最新版本,也都跟上吧,不过 redis 最新的 4 测试好像有问题,懒得折腾,直接上 ioredis。

改配置

因为我们更换了包,所以需要到对应的文件夹把包换一下

- const redis = require('socket.io-redis');
+ const { createAdapter } = require('@socket.io/redis-adapter');
+ const Redis = require('ioredis');

然后找到代码

if (config.redis) {

修改如下内容:

-    const adapter = redis(config.redis);
-    // https://github.com/socketio/socket.io-redis/issues/21
-    adapter.prototype.on('error', err => {
-      app.coreLogger.error(err);
-    });
-    app.io.adapter(adapter);
+    const pubClient = new Redis(config.redis);
+    const subClient = pubClient.duplicate();
+    pubClient.on('error', err => {
+      app.coreLogger.error(err);
+    });
+    subClient.on('error', err => {
+      app.coreLogger.error(err);
+    });
+    config.adapter = {
+      key: config.adapter?config.adapter.key:undefined,
+      requestsTimeout: config.adapter?config.adapter.requestsTimeout:5000,
+      publishOnSpecificResponseChannel: config.adapter?config.adapter.requpublishOnSpecificResponseChannel: false
+    }
+    app.io.adapter(createAdapter(pubClient, subClient,config.adapter));

这里加了一个 adapter 的参数,这是为了可以定制适配器。

使用

因为我没有把代码发成包,所以我直接把代码拷贝到项目底下

在项目根目录中新建一个plugins文件夹,把插件拷贝到该目录下,然后修改app/config/plugin.js

{
  io:{
    enable: true,
    package: "../../plugins/egg-socket.io"
  }
}

这样就可以使用 4.4.0 版本了。

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/38

#node#egg#socket.io#版本升级

相关推荐

NodeJs发起https请求报错:certificate has expired

在egg中发起https请求时提示证书过期错误(certificate has expired)问题记录

Node定时任务怎么做

linux有crontab定时任务,那么在Node中,定时任务该如何实现?