4
我把一个简单的套接字服务器放在一起(见下文)。目前,它无法处理多个/并发请求。如何使套接字服务器更高效 - 即能够处理并发请求?有没有我可以利用的clojure结构?到目前为止,我已经想过使用Java的NIO(而不是IO)或netty(如指出here)。如何管理多个连接?
(ns server.policy
(:import
(java.net ServerSocket SocketException)
java.io.PrintWriter))
(defn create-socket
"Creates a socket on given port."
[port]
(ServerSocket. port))
(defn get-writer
"Create a socket file writer."
[client]
(PrintWriter. (.getOutputStream client)))
(defn listen-and-respond
"Accepts connection and responds."
[server-socket service]
(let [client (.accept server-socket)
socket-writer (get-writer client)]
(service socket-writer)))
(defn policy-provider
"Returns domain policy content."
[socket-writer]
(.print socket-writer "<content>This is a test</content>")
(.flush socket-writer)
(.close socket-writer))
(defn run-server
[port]
(let [server-socket (create-socket port)]
(while (not (.isClosed server-socket))
(listen-and-respond server-socket policy-provider))))
感谢您对'aleph'图书馆的提醒。我一定会尝试它 - 我想直接尝试netty,但这不是很顺利 - > http://stackoverflow.com/questions/10918300/java-interop-netty-clojure – Ari