【问题标题】:Multithreaded Clojure Luminus server?多线程 Clojure Luminus 服务器?
【发布时间】:2014-07-01 21:19:00
【问题描述】:

我不知道如何表达这一点,但任何关于如何实现以下行为的想法都会很棒。

我有一个对命令行程序进行长时间运行调用的 Web 服务器。我希望服务器处理多个长时间运行的调用,但在调用完成之前不返回给定的请求。这不是一个网站,所以调用运行很长时间是可以的,客户端也不会超时。关于如何实现这一目标的任何想法?

此链接是否相关? writing a multiplexing server in clojure?

【问题讨论】:

  • 该链接已过期,因为最佳答案指向已弃用的 clojure.contrib。

标签: multithreading clojure luminus


【解决方案1】:

鉴于 Luminus 会生成一个 war 文件(我假设它会生成一个 war 文件,因为它在 ring 和 compojure 之上运行),那么它已经是“多线程的”,因为当您在 tomcat 或 jetty 中运行该 war 文件时,每个请求将获得自己的线程。

客户端可以将他们的套接字读取超时设置为无限,他们将永远等待。

【讨论】:

  • 感谢您的回复。现在,我只是运行 uberjar。这种行为是否需要使用 tomcat 或 jetty?如果可能的话,我只是想降低复杂性。
  • 我认为 uberjar 创建了一个嵌入式码头服务器,所以很好。但是,我不确定您是否可以在以这种方式运行时调整请求线程的数量。
【解决方案2】:

如果您的调用因 CPU 使用率以外的任何原因而较长,您最好的选择是在 uberjar 中使用 http-kitaleph。与其他服务器不同,http-kitaleph 使用线程池而不是每个请求的线程,并且如果您遇到除 CPU 使用之外的任何瓶颈(例如任意睡眠时间、网络或磁盘 io 等),比线程池的性能要好于每个请求的线程。

http-kit client / ring server
aleph client / ring server

【讨论】:

  • 我发现了这个有用的信息,但实际上是 CPU 使用率导致请求等待。不过,以后知道这一点可能会很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 2015-08-11
  • 2019-01-20
  • 2019-05-27
  • 2015-02-10
相关资源
最近更新 更多