簡単なソケット サーバーを作成しました (以下を参照)。現在、複数/同時リクエストを処理することはできません。ソケットサーバーをより効率的にするにはどうすればよいですか?つまり、同時リクエストを処理できるようにするにはどうすればよいですか? 活用できる clojure コンストラクトはありますか? これまでのところ、Java の NIO (IO の代わりに) または netty (ここで指摘されているように) のいずれかを使用することを考えてきました。
(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))))