clojure.contrib.server-socket
è tuo amico. Utilizzare create-server
in questo modo per creare un semplice server di 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))
Ora telnet per assicurarsi che funzioni:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello // this is the echoed line, woohoo!
Tra l'altro, il server è multithreaded anche, perché clojure.contrib.server-socket
crea un nuovo thread su accettare una nuova connessione.
Se ciò non soddisfa le tue esigenze, l'API Java è tua amica. Dal momento che hai pieno accesso alle classi Java da Clojure, puoi semplicemente usare i socket Java se devi scendere al metal. Non so nulla del tuo background, ma supponendo che tu non abbia usato i socket Java, Sun ha un tutorial: http://java.sun.com/docs/books/tutorial/networking/sockets/
bellissimo! grazie :) – horseyguy
Grazie! Ho creato un semplice progetto leiningen per questo qui con il tuo codice: https://github.com/cymen/clojure-socket-echo – Cymen
Server-socket ora vive in clojars dopo la rottura di clojure.contrib. https://clojars.org/server-socket è il posto dove andare per Clojure> 1.2. –