Rust 中是否有内置或规范的方式来“发布”状态?

Is there an inbuilt or canonical way in Rust to ‘publish’ state?

Rust 中是否有任何规范的方法来发布频繁更新的“状态”,以便任何数量的消费者都可以读取它而无需提供对对象本身的访问?

我的用例是我有一个通过网络套接字传入的信息流,并希望聚合指标可供其他线程使用。可以在外部使用 Kafka 之类的东西来做到这一点,我可能会推出自己的内部解决方案,但想知道是否还有其他方法?

我在 Go 中使用的另一种方法是让消费者向生产者注册自己,每个人都收到一个频道,而生产者只需分别发布到每个频道。通常消费者数量很少,所以这可能很有效,但想知道是否有更好的方法。

听起来你想要一个“广播频道”。

如果您正在使用 async,流行的 tokio crate 在其 sync::broadcast 模块中提供了一个实现:

A multi-producer, multi-consumer broadcast queue. Each sent value is seen by all consumers.

A Sender is used to broadcast values to all connected Receiver values. Sender handles are clone-able, allowing concurrent send and receive actions. [...]

[...]

New Receiver handles are created by calling Sender::subscribe. The returned Receiver will receive values sent after the call to subscribe.

如果这不太符合您的喜好,可以通过在 crates.io.

上搜索 "broadcast" 找到提供类似类型的其他 crate