2010-03-30 3 views
11

Я работаю над клиентом MUD, написанным на Clojure. Прямо сейчас мне нужны два разных потока. Тот, который получает вход от пользователя и отправляет его в MUD (через простой Socket), и тот, который считывает и выводит данные из MUD пользователю.Clojure лучший способ добиться нескольких потоков?

Должен ли я использовать Java Threads, или есть какая-то особенность, характерная для Clojure, к которой я должен обратиться?

+0

HTTP://clojure.org/concurrent_programming полезно –

+4

«Во всех случаях Clojure делает не заменить систему потоков Java, а работает с ней. Clojure функции java.util.concurrent.Callable, поэтому они работают с инфраструктурой Executor и т. Д. » –

ответ

8

Я бы рекомендовал использовать функцию pcalls, например:

(defn- process-server-responses [] 
    (prn "server connected") 
    (. java.lang.Thread sleep 1000) 
    (prn "server disconnected")) 

(defn- process-client-input [] 
    (prn "client-input start") 
    (. java.lang.Thread sleep 1000) 
    (prn "client-input stop")) 

(pcalls process-server-responses process-client-input) 

Выход для выше:

"server connected" 
"client-input start" 
"server disconnected" 
"client-input stop" 

Docs для pcalls здесь:

http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/pcalls

+0

Извините ... Я хромой. Я просто читал, что вы пишете MUD-клиент, а не MUD-сервер. –

+0

Я обновил мой ответ на меня более применим к вашему вопросу :) –

+0

Большое спасибо! –