我阅读有关 Clojure 的内容已经有一段时间了,我正在考虑将其作为 Node.js(我已将其用于另一个项目)的替代品。最有前途的库似乎是 Aleph/Lamina,不幸的是它没有 Node 那么多的例子。我的问题是:
如何使用一系列异步操作处理请求,例如从 MongoDB 读取文档、进行一些计算、保存新文档并将其在响应中发送?我无法从 Lamina wiki 页面的示例中编写它。这听起来像是一个非常常见的用例,但我很惊讶没有找到任何显示它的代码。如果您能给我看一些示例代码,那就太好了。
此设置对于重负载服务器(例如,每秒数万个请求)来说足够吗?我无法为每个新请求创建一个线程,因此我需要类似于 Node 的方法。
是否有任何中型或大型公司使用此技术的示例?
是否有更好的 Clojure 替代 Node(除了 Aleph/Lamina 之外)?也许 Clojurescript 的目标是 Node?我的客户端不是用 Javascript 编写的,因此在客户端和服务器中使用相同的语言对我来说并不是一个优势。
谢谢!
最佳答案
一些提示:
- 您需要查看Aleph它在 Lamina channel 抽象之上构建 HTTP 抽象。
- 向 MongoDB 读取和写入文档可以是异步的,但库应该提供此功能。在 Node.js 中,MongoDB 库必须是异步的,否则会搞砸 Node 编程模型,而 Clojure 则不然,所以 Clojure MongoDB 库很可能提供非异步功能。
- 异步操作仅在 IO 情况下有用,即读/写 mongodb、发回响应等。生成计算是 CPU 密集型操作,与异步模型无关。
- Vert.x是 Java 世界 Node.js。 Clojure 支持已在路线图中。我更喜欢 Aleph,因为你可以根据需要在异步和非异步世界中进行游戏。
关于node.js - 使用 Aleph/Lamina 异步访问 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13522414/