gpt4 book ai didi

clojure - 将 webapp 前端添加到现有 clojure 应用程序

转载 作者:行者123 更新时间:2023-12-02 21:02:54 24 4
gpt4 key购买 nike

我有一个基于 Clojure 的聊天机器人,我使用 lein run 以典型的 leiningen 方式启动它。我想为这个应用程序添加一个前端,但不完全确定如何去做。从阅读关于 compojure、lib-noir 和 Ring 的文档来看,标准的服务方式似乎是使用 lein Ring 服务器。如果可能的话,我宁愿用单个 lein 命令启动应用程序和前端。这是否涉及使用诸如 (run-jetty handler {:port 3000}) 之类的东西手动启动服务器(可能在另一个线程中),或者有人可以推荐更好的方法吗?

最佳答案

在您的案例中,您对“前端”的理解是什么?我看到两种可能性。

第一个是当您的 Clojure 机器人完全独立并且有一些外部接口(interface)可以交互时。在这种情况下,您的前端将是通过此外部接口(interface)与机器人对话的单独应用程序,实际上在这种情况下,如果您想使用单个 lein 命令启动程序,您应该在中使用显式 -main 函数您的网络应用程序将首先运行您的机器人,然后启动服务器。我不知道启动服务器的确切命令;你的看起来不错,但我想我在某处读到过这种启动方式已被弃用......

另一种可能性是当您希望将网络应用程序集成到机器人中时。在这种情况下,您只需以直接使用机器人 namespace 的方式编写 Web 应用程序即可;不需要-main函数,您所要做的就是运行leinring server命令。

第二个对我来说看起来更清晰,但这取决于你的机器人的整体架构。

更新。

我更彻底地研究了ring和leiningen如何协同工作,似乎让你得到你想要的最简单的方法如下。首先,安装 lein-ring 插件 its readme指挥。
接下来,配置您的 project.clj 类似于以下内容:

(defproject your-project "0.0.1"
:dependencies [...]
... ; All other configuration
:ring {:handler your-namespace.web/handler
:init your-namespace.bot/init})

看,您的 project.clj 文件中应该有其他选项(它们在我上面链接的自述文件中进行了描述)。 :handler 是您的主要 Web 应用程序处理程序(请参阅环文档了解它是什么以及为什么需要它)。 :init 应该是您的初始化函数。 这正是您应该添加代码以启动机器人的位置。
最后,发出 leinring server 命令来启动您的 web 应用程序。这将首先调用您在 project.clj 中指定为 :init 的函数,该函数依次启动您的机器人,然后启动您的 Web 应用程序。

关于clojure - 将 webapp 前端添加到现有 clojure 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com