12

我正在尝试在 Clojure 中编写一个 http 文件下载器,在我的其他问题之一中,有人评论说使用专用的 http 客户端库比使用 Clojure 和 Java 自己的 api 编码更好。我做了一些研究,发现了一些,但我无法弄清楚每个的特点、优缺点。因此,如果有人可以解释它们的不同之处以及哪一个与我的项目非常匹配,那将不胜感激。:-D

最初使用 Java 的库和相应的 Clojure 包装器:

Apache HttpClient及其 Clojure 包装器clj-http

Apache HttpAsyncClient并且找不到任何 Clojure 包装器。

Netty和 Clojure 的“包装器”是Aleph,我猜?

异步 Http 客户端及其 Clojure 包装器http.async.client

最后但同样重要的是,一个 Clojure 库:

http 套件

4

2 回答 2

12

我只能比较 http-kit 和 clj-http。

clj-http:

  • 简单的 API
  • 仅限 HTTP 客户端
  • Apache HttpComponents 的包装器

http 套件:

  • 专为异步设计
  • HTTP客户端和服务器,更强大
  • 以 clj-http 为模型的客户端 API,但它添加了更多抽象,因此认知负荷更高

如果你关心依赖,http-kit 可能是更好的选择,因为它是一个独立的库,除了 clojure.core 之外没有其他依赖。正因为如此,它产生了更小的 uberjars。对于示例 HTTP GET 项目:

clj-http:

1.2M    clj-http-test-0.1.0-SNAPSHOT.jar
6.7M    clj-http-test-0.1.0-SNAPSHOT-standalone.jar

http-kit:

65K     http-kit-test-0.1.0-SNAPSHOT.jar
3.8M    http-kit-test-0.1.0-SNAPSHOT-standalone.jar

另一方面,如果您更愿意相信经过实战考验的 Apache HttpComponents 并且可能会从更大的 Java 社区获得更好的支持,那么您可以选择 clj-http。

于 2014-07-07T10:54:36.000 回答
7

我不会对您发布的库进行全面比较,因为我没有使用所有这些库。但是我之前用过http-kit库,真的很好用。

http-kit 很容易使用,顺便模仿了 clj-http 库,它真的很高效。尽管此比较与您的问题无关,但它仍然可以提供一些启示:TechEmpower Frameworks Round 2

于 2013-08-10T10:19:36.670 回答