Socket.io Redis适配器和Redis发射器有什么区别

What is the difference between Socket.io Redis adapter and Redis emitter

我正在阅读此 article from the Socket.io 文档

我发现以下两个包 @socket.io/redis-adapter@socket.io/redis-emitter 用于向其他服务器上的客户端发送数据。

这两个包有什么不同吗?如果是的话有什么区别?什么时候使用一个而不是另一个?

来自 Damien 的简短回答 — Socket.io

的核心提交者

The adapter is a component inside the Socket.IO server, while the emitter can be used in another process/service.

并且documentation里面有两张图解释了每个包的职责


长答案

它们非常相似,但有以下两个区别:

@socket.io/redis-adapter

  1. 必须与 socket.io 服务器链接,并且您必须为其提供 publishsubscribe redis 客户端。像下面这样:
io.adapter(createAdapter(pubClient, subClient))
  1. 负责 send/receive socket.io 命令 to/from 其他服务器。

@socket.io/redis-emitter

  1. 无法与 socket.io 服务器链接,并且您必须为其提供 publish redis 客户端。像下面这样:
const emitter = new Emitter(pubClient);
  1. 仅负责向其他服务器发送 socket.io 命令(具有 @socket.io/redis-adapter 具有相同 redis 数据库连接和通道密钥配置的适配器)

注意:这些差异适用于所有 socket.io 适配器和发射器(例如 @socket.io/mongo-adapter@socket.io/mongo-emitter