clojure.contrib.server-socket
твой друг. Используйте create-server
как для создания простого эхо-сервера:
(import '[java.io BufferedReader InputStreamReader OutputStreamWriter])
(use 'clojure.contrib.server-socket)
(defn echo-server []
(letfn [(echo [in out]
(binding [*in* (BufferedReader. (InputStreamReader. in))
*out* (OutputStreamWriter. out)]
(loop []
(let [input (read-line)]
(print input)
(flush))
(recur))))]
(create-server 8080 echo)))
(def my-server (echo-server))
Теперь телнет, чтобы убедиться, что он работает:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello // this is the echoed line, woohoo!
Кстати, сервер тоже многопоточный, потому что clojure.contrib.server-socket
создает новый поток при принятии нового соединения.
Если это не отвечает вашим потребностям, тогда Java API - ваш друг. Поскольку у вас есть полный доступ к классам Java из Clojure, вы можете просто использовать сокеты Java, если вам нужно приступить к работе. Я ничего не знаю о вашем прошлом, но если вы раньше не использовали Java-сокеты, у Sun есть учебник: http://java.sun.com/docs/books/tutorial/networking/sockets/