запись сервера мультиплексирования в clojure?

Существует много способов сделать ориентированную на многопотоковое исполнение Singleton* инициализация на окнах. На самом деле некоторые из них являются даже межплатформенными. В ТАК поток, с которым Вы связались, они искали Singleton, которая лениво создается в C, который немного более конкретен, и может быть немного более хитрым, чтобы сделать правильно, учитывая запутанность модели памяти, под которой Вы работаете.

  • , который Вы никогда не должны использовать
22
задан horseyguy 3 August 2009 в 16:42
поделиться

3 ответа

clojure.contrib.server-socket - ваш друг. Используйте 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 - ваш друг. Поскольку у вас есть полный доступ к классам Java из Clojure, вы можете просто использовать сокеты Java, если вам нужно перейти к делу. Я ничего не знаю о вашем прошлом, но, если предположить, что вы раньше не использовали сокеты Java, у Sun есть руководство: http://java.sun.com/docs/books/tutorial/networking/sockets/

31
ответ дан 29 November 2019 в 04:40
поделиться

Просмотрите clojure.contrib , чтобы посмотрите, есть ли какие-нибудь библиотеки для управления сокетами. Если нет, то вам остается написать свой собственный, используя классы Java через средства взаимодействия с Java Clojure.

1
ответ дан 29 November 2019 в 04:40
поделиться

Я написал небольшую многопользовательскую текстовую приключенческую игру под названием Mire , которая демонстрирует это. Это довольно просто.

10
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: