如何跨多个订户流式传输队列?

时间:2016-08-25 12:55:40

标签: concurrency clojure

我想在更高层次上完成的任务:

我有一个执行I / O并生成消息的函数。我有多个订阅者客户端,可以随时订阅或离开。当一个新的客户端订阅时,它应该在流式传输新消息之前得到x个先前的输出(很像unix" tail -f")。

我的想法是将消息发送给代理,代理是一个环形缓冲区。新客户端将读取代理,然后向代理添加监视。问题是,如何确保在阅读和添加监视之间没有新消息到达?

接下来的想法是创建2个引用,一个用于客户端列表,一个用于环形缓冲区。然后,我可以在事务中添加客户端或发布消息。问题是,当我添加客户端时,我必须读取环形缓冲区并将其发送到客户端(I / O)。这是可以重试的交易中的副作用。

最后的想法是使用锁,但这不是唯一的方法吗?

0 个答案:

没有答案