0

我有一些代码基本上可以做到这一点 psudocode()

registerCamera(id) {
       createRedisPubChannel("Camera_"+id)
}

cameraDisconnect() {
        removeRedisSubChannel("Camera_"+id)
}

然后我通过该通道与该摄像机进行通信,这使我可以拥有多个引擎。

我还可以构造代码,而不是为每个摄像机创建一个通道。我可以创建一个名为“cameraComms”的频道,并确保每条消息都包含一个相机 ID。

我想知道这两种设计模式是否有任何性能优势/劣势?

如果有帮助,我可以为每个进程注册多达 200 多个摄像头,并且通信跨 3 个运行 3 个 Redis 实例的不同机器。

非常感谢帮助/建议。

4

1 回答 1

1

先决条件:

从性能的角度来看,没有。频道,没有。出版商和没有。订阅者的数量无关紧要,但您处理的消息的频率和数量确实很重要。

例如,

1 个发布者一次发布 1000 条消息会导致比 1000 个发布者一次发送 1 条消息更多的开销。

同样,1 个订阅者接收 1000 条消息将导致比 1000 个订阅者一次接收 1 条消息更多的开销。

订阅同一频道的订阅者越多,发布的消息副本就越多,这是一种开销。

So the thumb Rule here is :

 1. Publisher do not flood messages at once.
 2. Subscriber must not be in a position to receive flooded messages at once.

要回答您的问题:

如果您的发布者很重,您可以为 n 个摄像头使用 n 个频道。1 个发布者将在频道中发布,1 个订阅者将收到这些消息。通过这种方式,您最终将拥有 n 个频道、n 个发布者和 n 个订阅者。

如果您的发布者不重,您可以使用单个频道,发布者将发送相机 ID,而您的单个订阅者将使用消息并处理。

于 2016-06-21T10:45:37.497 回答