воскресенье, 20 февраля 2011 г.

Крякнем, плюнем и надёжно скрепим скотчем (с)

Итак, мне удалось запустить локальную версию сайта lisper.ru на своей машине под управлением Mongrel2 без Hunchentoot. В наличии имеется некоторое количество костылей, жуткого оверхеда и ещё не решённых вопросов, но это работает, включая обработку POST-запросов (как application/x-www-form-urlencoded, так и multipart/form-data), работу с cookie и отдачу статики.

Изменение в коде компонентов lisper.ru были самыми минимальными и заключались в переключении с использования Hunchentoot API на библиотеку cl-wsal.

Common Lisp Web servers abstraction layer

Идея cl-wsal зрела у меня уже давно и нужен был лишь маленький толчок, который и был сделан в предыдущем обсуждении. Я вынес из Hunchentoot значительную часть кода, которая может быть полезной в любых веб-серверах для CL в эту библиотеку и с её помощью довольно легко довёл cl-mongrel2 до необходимого состояния.

cl-wsal определяет протокол, с помощью которого строится унифицированный интерфейс для клиентского кода. Также имеется набор утилит, который могу использовать разработчики веб-сервера.

Весь этот код хорошо протестирован, поскольку просто взят из Hunchentoot. Правда, кое-что я изменил. Использование flexi-streams я заменил на babel. Пришлось вырвать кусок из chunga. А также скопировать и несколько отредактировать rfc2388.lisp из одноимённого пакета.

Вся работа над соответствующими изменениями в RESTAS ведётся в бранче Mongrel2. Следующий релиз RESTAS не будет включать этих изменений, посколькуо будет увязан с новым релизом Hunchentoot. А вот после этого я буду полностью переключаться на использование cl-wsal.

4 комментария:

  1. Я готов пробовать развернуть все свое на Mongrel2, но нужен туториал :)

    ОтветитьУдалить
  2. @Rigidus

    Ты не смелый и храбрый, ты безрассудный )) Подожди. Там ещё много работы по доводке. После чего надо будет запустить схему на lisper.ru и что бы она поработала там пару месяцев. Тогда можно будет пихать в продакшен.

    ОтветитьУдалить
  3. Интересно, что быстрее работает? Hunchentoot или mongrel2 в таком виде?

    ОтветитьУдалить
  4. Mongrel2 однозначно быстрее, не смотря на жукий оверхед (в cl-mongrel2, надо пилить) при отправке ответа. При этом, как и ожидалось, ему всё равно на количество параллельных запросов.

    Но пока для Mongrel2 у меня только однопоточная схема.

    ОтветитьУдалить