繁体   English   中英

如何停止 clojure 中的码头服务器?

[英]How do I stop jetty server in clojure?

我正在使用 ring 和 clojure 编写一个 web 应用程序。我正在为开发服务器使用 jetty 适配器,为 IDE 使用 emacs/SLIME。虽然 wrap-reload 确实有帮助,但 run-jetty 阻止了我的 slime session,我希望能够随意启动/停止它,而不必在单独的终端 session 中运行它。理想情况下,我想定义一个服务器代理和函数 start-server 和 stop-server 来启动/停止代理内部的服务器。 这可能吗?

我的Ring应用程序中通常有一行如下所示:

(defonce server (run-jetty #'my-app {:port 8080 :join? false}))

这可以防止锁定REPL。 它还允许我重新编译此文件,而不必担心我的服务器将被重新定义。 它还允许您在REPL中进行交互,如下所示:

user=> (.stop server)

user=> (.start server)

Jetty文档提供了有关Jetty 正常关闭的一些信息。 这可能不是足够的信息,但它可能会让你开始。

我还没有开始使用compojure,但总的来说我更喜欢使用Tomcat。 它的功能更全面; 除此之外,还有一个记录良好的API用于启动和关闭它,它在专用端口上侦听shutdown命令; 有一些ant任务可以做到这一点,当然也可以从Java应用程序中调用它们。 我只是不知道Compojure将REPL连接到Web容器的运行实例,以及是否/如何自动类重新加载...希望其他人能够提供更多信息。

12年后。

VS代码/卡尔瓦:

如果你像我一样从 VSCode / Calva 中的 repl 开始码头,你必须在终端而不是 REPL CTRL-C 服务器进程。

事实上,服务器进程绑定到终端而不是 REPL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM