我想在Clojure中编写一个简单的多路复用服务器(作为学习语言的示例项目),但我很难找到资源来帮助我在网上.
有没有人有任何资源可以指出Clojure中的套接字编程的基础知识和编写这样的服务器的最佳方法?
ala*_*ode 31
clojure.contrib.server-socket
是你的朋友.create-server
像这样使用来创建一个简单的echo服务器:
(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))
Run Code Online (Sandbox Code Playgroud)
现在telnet以确保它的工作原理:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello // this is the echoed line, woohoo!
Run Code Online (Sandbox Code Playgroud)
顺便说一句,服务器也是多线程的,因为clojure.contrib.server-socket
在接受新连接时创建一个新线程.
如果这不符合您的需求,那么Java API就是您的朋友.由于您可以完全访问Clojure中的Java类,因此如果需要了解Java金属,则可以使用Java套接字.我对你的背景一无所知,但假设你之前没有使用过Java套接字,Sun有一个教程:http://java.sun.com/docs/books/tutorial/networking/sockets/