clojure - How to Manage Multiple Connections? -


i put simple socket server (see below). currently, not capable of handling multiple/concurrent requests. how can make socket server more efficient -- i.e. capable of handling concurrent requests? there clojure constructs can leverage? far, i've thought of using either java's nio (instead of io) or netty (as pointed out here).

(ns server.policy     (:import          (java.net serversocket socketexception)         java.io.printwriter))      (defn create-socket         "creates socket on given port."         [port]         (serversocket. port))      (defn get-writer         "create socket file writer."         [client]         (printwriter. (.getoutputstream client)))      (defn listen-and-respond         "accepts connection , 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 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)))) 

i have had success using netty directly. however, if want feels little more idiomatic clojure code, take @ aleph library. uses netty internally, results in more simple code:

(use 'lamina.core 'aleph.tcp)  (defn echo-handler [channel client-info]   (siphon channel channel))  (start-tcp-server echo-handler {:port 1234}) 

also, keep in mind sometimes need reference lamina documentation in addition aleph documentation.


Comments

Popular posts from this blog

jquery - Invalid Assignment Left-Hand Side -

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -