gpt4 book ai didi

clojure - 在clojure中编写一个多路复用服务器?

转载 作者:行者123 更新时间:2023-12-03 11:35:45 25 4
gpt4 key购买 nike

我想用Clojure编写一个简单的多路复用服务器(作为学习该语言的示例项目),但是我很难找到资源来在网络上帮助我。

有没有人有任何资源可以指向Clojure中套接字编程的基础
以及编写这样的服务器的最佳方法?

最佳答案

clojure.contrib.server-socket是你的 friend 。像这样使用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来确保它可以正常工作:
$ 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是您的 friend 。由于您可以从Clojure完全访问Java类,因此,如果需要深入了解,可以只使用Java套接字。我对您的背景一无所知,但是假设您以前没有使用过Java套接字,Sun会提供一个教程: http://java.sun.com/docs/books/tutorial/networking/sockets/

关于clojure - 在clojure中编写一个多路复用服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com