Итак, мне удалось запустить локальную версию сайта 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.
Подписаться на:
Комментарии к сообщению (Atom)
Я готов пробовать развернуть все свое на Mongrel2, но нужен туториал :)
ОтветитьУдалить@Rigidus
ОтветитьУдалитьТы не смелый и храбрый, ты безрассудный )) Подожди. Там ещё много работы по доводке. После чего надо будет запустить схему на lisper.ru и что бы она поработала там пару месяцев. Тогда можно будет пихать в продакшен.
Интересно, что быстрее работает? Hunchentoot или mongrel2 в таком виде?
ОтветитьУдалитьMongrel2 однозначно быстрее, не смотря на жукий оверхед (в cl-mongrel2, надо пилить) при отправке ответа. При этом, как и ожидалось, ему всё равно на количество параллельных запросов.
ОтветитьУдалитьНо пока для Mongrel2 у меня только однопоточная схема.