clojure.contrib.server-socket
es tu amigo. Utilice create-server
al igual que para crear un simple servidor de eco:
(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))
Ahora telnet para asegurarse de que funciona:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello // this is the echoed line, woohoo!
Por cierto, el servidor es multiproceso también, porque clojure.contrib.server-socket
crea un nuevo hilo en aceptando una nueva conexión.
Si eso no satisface sus necesidades, entonces la API de Java es su amiga. Como tiene acceso completo a las clases de Java de Clojure, puede usar los sockets de Java si necesita acceder al metal. No sé nada sobre sus antecedentes, pero suponiendo que no haya utilizado zócalos Java antes, Sun tiene un tutorial: http://java.sun.com/docs/books/tutorial/networking/sockets/
¡hermoso! gracias :) – horseyguy
¡Gracias! Aquí he creado un proyecto de leiningen simple con su código: https://github.com/cymen/clojure-socket-echo – Cymen
Server-socket ahora vive en clojars después de la ruptura de clojure.contrib. https://clojars.org/server-socket es el lugar para ir a Clojure> 1.2. –