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
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 connectedReceiver
values.Sender
handles are clone-able, allowing concurrent send and receive actions. [...][...]
New
Receiver
handles are created by callingSender::subscribe
. The returnedReceiver
will receive values sent after the call tosubscribe
.
如果这不太符合您的喜好,可以通过在 crates.io.
上搜索 "broadcast" 找到提供类似类型的其他 crate