Clojure 如何管理多个连接?

Clojure 如何管理多个连接?,clojure,Clojure,我组装了一个简单的套接字服务器(见下文)。目前,它无法处理多个/并发请求。如何使套接字服务器更高效——即能够处理并发请求?是否有我可以利用的clojure结构?到目前为止,我已经考虑过使用java的NIO(而不是IO)或netty(如前所述) (ns server.policy) (:进口 (java.net ServerSocket SocketException) java.io.PrintWriter) (defn创建套接字 “在给定端口上创建套接字。” [港口] (ServerSocke

我组装了一个简单的套接字服务器(见下文)。目前,它无法处理多个/并发请求。如何使套接字服务器更高效——即能够处理并发请求?是否有我可以利用的clojure结构?到目前为止,我已经考虑过使用java的NIO(而不是IO)或netty(如前所述)

(ns server.policy)
(:进口
(java.net ServerSocket SocketException)
java.io.PrintWriter)
(defn创建套接字
“在给定端口上创建套接字。”
[港口]
(ServerSocket.port))
(defn找作家
“创建套接字文件编写器。”
[客户]
(PrintWriter。(.getOutputStream客户端)))
(defn倾听并回答
“接受连接并响应。”
[服务器套接字服务]
(让[客户端(.accept服务器套接字)
套接字编写器(获取编写器客户端)]
(服务套接字写入程序)
(defn策略提供程序)
“返回域策略内容。”
[套接字编写器]
(.打印套接字编写器“这是一个测试”)
(.嵌入式插座写入程序)
(.关闭套接字写入程序)
(defn)运行服务器
[港口]
(让[服务器套接字(创建套接字端口)]
(而不是(.isClosed服务器套接字))
(侦听并响应服务器套接字策略提供程序)))

我成功地直接使用了Netty。但是,如果您想要一些感觉更像习惯性Clojure代码的东西,请查看该库。它在内部使用Netty,但生成的代码要简单得多:

(use 'lamina.core 'aleph.tcp)

(defn echo-handler [channel client-info]
  (siphon channel channel))

(start-tcp-server echo-handler {:port 1234})

此外,请记住,除了aleph文档之外,您还需要参考文档。

感谢您对“aleph”库的介绍。我肯定会试试的--我想直接试试netty,但进展不太顺利-->
(use 'lamina.core 'aleph.tcp)

(defn echo-handler [channel client-info]
  (siphon channel channel))

(start-tcp-server echo-handler {:port 1234})