I suppose this is a strange question to the huge majority of programmers that work daily with Java. I don't. I know Java-the-language, because I worked on Java projects, but not Java-the-world. I never made a web app from scratch in Java. If I have to do it with Python, Ruby, I know where to go (Django or Rails), but if I want to make a web application in Clojure, not because I'm forced to live in a Java world, but because I like the language and I want to give it a try, what libraries and frameworks should I use?


当前回答

我现在常用的网络图书馆是yada。

如果您刚刚开始,介绍性的服务器是Compojure。我认为它是Clojure世界中web服务器的apache(在这种情况下,yada/aleph将是nginx)。你可以用鲁米努斯做模板。它有很多变体,比如compojure-api。

我尝试了欧台座,并对它感到满意。我不敢说已经掌握了它,但是它的语法很好,感觉很有凝聚力,而且看起来确实有很好的性能。它也得到了Cognitect (Rich Hickey工作的Clojure/Datomic公司)的支持。

我发现Aleph呈现了一个有趣的抽象,内置的反压力似乎很有趣。我还没有玩过它,但它绝对在我的清单上。

在尝试了不同的网络服务器之后,以下是我的优缺点列表:

简短的回答:看看Luminus来快速开始,也许会随着你的需求发展而转向其他东西(也许Yada)。

Compojure

优点(1): 简单,大量的模板/示例(例如,发光) 缺点(2): 不是高性能的(每个请求一个线程),期望性能略好于rails 不简单,中间件模型有不便之处

基座

优点(3): 拦截器模型,将拦截器添加到路由子集的愉快语法 高性能路由器 支持json/transit/multipart表单透明开箱即用,不需要任何要求。非常酷! 缺点(4): 没有websocket支持(目前),返回核心。异步通道会很好 如果把它放在Stuart Sierra的组件中,重载有点慢(我认为你应该使用重载拦截器) 没有异步拦截器的测试工具 需要接受(?)

阿莱

优点 (3):

性能 反压力 Websocket/SSE支持返回流形流

缺点(1):

低水平,做自己的风格(即。它只是给了你一种方法让你的处理者做点什么。没有路由器,什么都没有)。并不是真正的缺点,只是要注意。

Yada

优点 (3):

建在阿莱夫的基础上 内容协商的 时髦的集成 bidi很好(尽管我更喜欢基座路由器语法)

缺点(1):

文档(虽然不像nginx-clojure那样糟糕,但正在迅速改进)。

HttpKit

优点 (2):

用Clojure编写!(和Java…) 性能看起来不错(请参阅600K并发连接的文章)

缺点(2):

不支持CORS 错误吗?而且,最近的提交也不多

Nginx-Clojure

注意:我没有使用它,主要是因为缺少文档。它看起来很有趣,而且性能非常好。

优点(2):

Nginx (performance, offload ssl, restart workers…) 这个模型是否允许零停机更新?那太棒了!

缺点(1):

文档(改善)。此外,我不想在nginx配置文件中嵌入字符串,如果这是唯一的方法。 第一次部署可能会有点复杂(?)

Immutant

注:我没有玩过它。

优点:

集成(缓存、消息传递、调度、wildfly部署)

缺点:

没有HTTP客户端

卡塔昆巴

注意:我还没有使用它,尽管文档看起来很棒。我接下来可能会试试。有一些聊天项目的例子看起来很有趣,它们对协议的大量使用起初让我这个Clojure开发新手望而却步。

优点(6):

文档!像所有的funcool项目一样,这个文档读起来很舒服。 类底座路由语法 应该是高性能的(在鼠包之上) 反压力 Websockets, sse, cors, security, ssl… 特色挖掘:邮政

缺点(2):

不完全确定ct/routes语法是多么令人愉快,以及关于放弃环规范(据说是异步的故事,但我认为基座的家伙固定) 不知道如何整合招摇过市等。 当我尝试它时,我不能让它立即工作

注意:如果原始性能是最重要的,Clojure web服务器的基准测试是可用的。

其他回答

Reframe和om。接下来可能就是你要找的了。

以Luminus web框架为例。我没有隶属关系,但从我尊敬的朋友那里听到了一些好消息。

到目前为止,我所遇到的最好的Clojure web框架是Compojure: http://github.com/weavejester/compojure/tree/master

它很小,但功能强大,并且具有漂亮优雅的语法。(它在底层使用Jetty,但它对您隐藏了Servlet API,除非您需要它,但这种情况不会经常发生)。去看看那个URL的README,然后下载一个快照并开始播放。

你也可以尝试Clojure线圈,http://github.com/zubairq/coils -免责声明:我是作者

还有“Noir”(http://www.webnoir.org/),这是一个新的Clojure web框架(太新了,文档还没有)。来自Django/Rails,我喜欢简单、直接的语法,它非常精简。