【问题标题】:Extending functionality of clojure core.async扩展 clojure core.async 的功能
【发布时间】:2013-10-31 06:08:01
【问题描述】:

是否建议用我自己的异步函数来扩展 core.async 的功能?

通道的异步由put!take! 处理,它们接受回调,但协议嵌套在async.impl.protocols 命名空间中。在这种情况下,impl 是否意味着 远离!,还是可以实现它们?

例如,我可以将 netty 通道或 java 套接字包装为 ReadPort 和 WritePort。

【问题讨论】:

  • 嗯,这里曾经是一个回答,基本上说“去吧!”好像已经撤回了。
  • 我会说做你想做的!
  • @Hendekagon 但是,如果协议是隐藏的,那么它很可能会在没有通知的情况下更改。那将是一头熊。
  • 我删除了我的答案,因为我误解了这个问题。我以为你在问是否使用,而不是执行 put!并采取!很好。但我不知道你是否可以自己实现它们。

标签: clojure core.async


【解决方案1】:

core.async 协议的目的是用作实现您自己的缓冲区、通道、端口等的实现挂钩。它们存在于 impl 下,因为它们是实现的一部分,而不是公共用户 API。

团队认为在发布库的非 alpha 版本之前,它们可以进行更改(我对此没有时间表)。从 async 的发布到现在,协议没有改变,但是目前在进程中有一个重大的变化,特别是 put!take!

如果您现在愿意处理捕获更改,请随意实施。

Tim B 花了很多时间研究将异步通道连接到网络,在保留通道语义的同时做到这一点非常具有挑战性。目前推荐的模式是使用专用线程与网络 I/O 通信并在“边缘”与应用程序中的通道通信(可能使用put!take!)。这种模式不需要实现内部协议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多