Mibori Shante — Google Node

Последние действия

Простой сервер без состояния

Что нужно?

Нужно описать некоторую процедуру-обработчик, которая будет запускаться при каждом соединении. Она будет управлять текущей сессией. При запуске в качестве аргументов ей передаются параметры соединения, а также неизменяемое значение типа состояния обработчика. Запущенная процедура может также принимать сообщения типа сообщения обработчика до тех пор, пока не завершит своё выполнение для текущего соединения.


Описание типов


Для того, чтобы описать простой сервер без состояния, тип сообщения обработчика и тип состояния обработчика делаем пустыми:

data Simple = Simple       -- тип состояния обработчика
data SimpleMsg = SimpleMsg -- тип сообщения обработчика


Описание обработчика в экземпляре

instance TCPServer Simple SimpleMsg where
    tcpHandler _ (h, _, _) =
        liftIO $ hPutStrLn h "I'm minimal TCPServer instance!"

, где
  • tcpHandler — это обработчик, который выполняется при каждом соединении и управляет вводом/выводом сессии.
    Потенциально может принимать сообщения типа SimpleMsg.
  • h — это Handle сессии.

Описание функции запуска.

Из GHCi сервер можно запускать строчкой m <- startMgr, где m сохранит ссылку на процесс менеджера соединений после его запуска. Вот исходник startMgr:

startMgr = action $ startManager Simple True 4000

, где
  • Simple — начальное состояние.
  • True — указывает на то, что обработчик tcpHandler каждого соединения нужно запускать через spawnOS.
  • 4000 — указывает порт, на который нужно принимать соединения.

Остановка сервера

Наш сервер не предполагает длительного удерживания соединения для каждой сессии. Поэтому stopMgr m и killMgr m, запущенные из GHCi остановят сервер одинаково быстро. Вот как они описываются:

stopMgr m = action $ stopManager m
killMgr m = action $ killManager m


Использование

После старта сервера, можно будет успешно подключаться через telnet ИмяМашины 4000 до тех пор, пока сервер не остановят.

Исходный код


Приложения (1)

  • Simple1.hs – добавлено 08.03.2009 15:06 пользователем Mibori Shante (версия 1)
    1 КБ Загрузить