tag:blogger.com,1999:blog-5411819754291292105.post8318987569348063681..comments2023-04-10T00:28:48.006-07:00Comments on archimag: RESTAS и Mongrel2archimaghttp://www.blogger.com/profile/07997791035847047137noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-5411819754291292105.post-85130443263428526992011-02-19T19:48:08.890-08:002011-02-19T19:48:08.890-08:00Написал в hunchentoot рассылку.
Я не готов обсужд...Написал в hunchentoot рассылку.<br /><br />Я не готов обсуждать решения основанные на асинхронном IO и callbacks, для этого мне сначала лучше ознакомиться с Node.JS и тому подобными.<br /><br />Но во всяком случае, хоть в апач вопрос таскмастера не стоит, собственный "taskmaster" apache таких возможностей не предоставит. Поэтому больших преимуществ по сравнению с простой реализацией для Mongrel2 апач не даст.<br /><br />Псокольку ты все равно собираешься первым шагом портировать API hunchentoot один к одному, а поддержку асинхронной работы отложить и релизовать в расширенном интерфейсе, можно пока остановиться на простом таск мастере для Mongrel2.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-52733494151887142412011-02-19T09:20:44.262-08:002011-02-19T09:20:44.262-08:00Не, thread pool это не модно ) Модно асинхронная о...Не, thread pool это не модно ) Модно асинхронная обработка, как в Node.JS. Для CL сейчас правда нет библиотек нужных, но это уже вопрос второй.<br /><br />Т.е. скажем надо сделать запрос к базе, в Node.JS делаешь запрос и указываешь callback, который надо выполнить по выполнению запроса. И библиотеки для работы с базами реально асинхронные. Это даёт возможность обрабатывать большое количество запросов в малом количестве потоков, не тратя лишних системных ресурсов.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-91741028381958624472011-02-19T09:17:24.470-08:002011-02-19T09:17:24.470-08:00Мне кажется thread pool сделать и все. Довольно пр...Мне кажется thread pool сделать и все. Довольно просто, и можно регулировать нагрузку. А что тут еще придумать не знаю. Только если экзотическое что-то.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-90403409342182274642011-02-19T09:08:58.504-08:002011-02-19T09:08:58.504-08:00ПонятноПонятноA. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-83636167837112241502011-02-19T08:45:42.927-08:002011-02-19T08:45:42.927-08:00Taskmaster в Hunchentoot решает как рулить запроса...Taskmaster в Hunchentoot решает как рулить запросами: в одном потоке, либо поток на соединение, либо ещё как. Mongrel2 же просто посылает сообщения по ZMQ и принимает их, всё асинхронно, что там делает конкретный обработчик ему всё равно, так что функционал Taskmaster для Mongrel2 надо реализовывать самостоятельно и как это делать наиболее эффективным образом ещё вопрос (ибо простейшая схема поток на соединение значительно обесценивает преимущества Mongrel2).<br /><br />В Apache же модуль вызывается синхронно и такого вопроса вообще не стоит. Будет ли запрос обрабатываться в потоке или в отдельном процессе решает сам Apache и это зависит от его настроек и сборки.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-37704156772365676512011-02-19T08:39:45.745-08:002011-02-19T08:39:45.745-08:00Ок, на ты удобнее :)
Какой Taskmaster имеется в ...Ок, на ты удобнее :) <br /><br />Какой Taskmaster имеется в виду? Я предполагаю что это компонент по функциям такой-же как Taskmaster в hunchentoot. (Просто я не знаю<br />API Mongrel2, да и сам tasmaster в hunchentoot размыто представляю, что он решает кто запрос будет обрабатывать; не уловил почему в Mongrel2 надо будет это писать, а в apache не надо).<br /><br />mod_ecl я не использовал, он недавно появился и я просто видел новость про него. Все-таки минус, это что только ECL поддерживается, который хоть и хороший лисп, но у других есть свои преимущества.<br /><br />С Mongrel Common Lisp веб станет как-то более модным :)<br /><br />Хотя одно другому не мешает. Я сегодня вечером напишу в рассылки, где эта идея может быть интересна.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-1828300327395347272011-02-19T07:57:35.925-08:002011-02-19T07:57:35.925-08:00@Anton Vodonosov
Давай на ты? ;)
Задача отделен...@Anton Vodonosov <br /><br />Давай на ты? ;)<br /><br />Задача отделения общей части Hunchentoot достаточно простая, просто бери и копируй в отдельный проект. Я сейчас это и делаю попутно.<br /><br />Сложность может быть в реализации интерфейса для конкретного сервера (там в Hunchentoot местами довольно запутанный код). Но и то. <br /><br />Вообще, у меня в результате обсуждения здесь окончательно всё сложилось (нужен был небольшой толчок) и я начал писать. К лету в этой части вряд ли что останется ) Появятся другие вопросы, например, по Mongrel2 надо продумывать Taskmaster и всякие там асинхронные вещи, а также веб-сокеты и т.п. Но я ещё х.з.<br /><br />Кстати, по mod_ecl вообще мне стало интересно. Там нет таких проблем, как с Mongrel2 (ибо у Apache уже есть Taskmaster), можно было бы достаточно просто всё это прикрутить (я под Apache и на C писать могу, писал когда-то) и запустить RESTAS для него.<br /><br />Поскольку я начал писать (главное начать), то какая нужна помощью по коду я пока не знаю, пока пишу )) А вот помощь с общением и "пропагандой" может быть была бы очень кстати. Тем более, что на английском я пишу с трудом. Т.е. поднять этот вопрос в рассылках Hunchentoot и mod_ecl было бы интересно, это да.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-31312800466183516002011-02-19T07:36:04.028-08:002011-02-19T07:36:04.028-08:00Так а что насчет времени? Времени же у вас мало? М...Так а что насчет времени? Времени же у вас мало? Может там тоже люди заинтересованные найдутся и подключатся.<br /><br />Alkhimov, linkfly и Rigidus будут участвовать?<br /><br />Сам я, если реально смотреть на вещи, к сожалению, не смогу участвовать, и так уже слишком много вещей одновременно делаю.<br /><br />Я думал попробовать предложить такой проект для google summer of code, т.е. чтобы какой-то студент летом этим занимался, но раз вы уже этим заниматься стали, есть ли смысл предлагать это? <br /><br />(Положительное в этом, что можно еще одного человека подключить на лето. Но это и некоторые дополнительные заботы: но нужно студент толковый нашелся, чтобы google проект утвердил, чтобы кто-то этим студентом руководил)<br /><br />Так же я думал написать автору mod_ecl, он тоже может интересоваться этим. А если так, то и в ECL лист можно было бы написать.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-53808683871922003552011-02-19T06:20:41.702-08:002011-02-19T06:20:41.702-08:00@Anton Vodonosov
Вообщем, решил ничего пока никуд...@Anton Vodonosov<br /><br />Вообщем, решил ничего пока никуда не писать, а делать Mongrel2. Как заработает как-нибудь прилично - тогда можно будет разговаривать. Заодно и опробую всё в боевых условиях.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-70495635772499469972011-02-19T04:27:20.962-08:002011-02-19T04:27:20.962-08:00Покурить ))
Тут два плана: писать в рассылу и дел...Покурить ))<br /><br />Тут два плана: писать в рассылу и делать Mongrel2 с этим интерфейсом.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-2290341138795957212011-02-19T04:26:35.025-08:002011-02-19T04:26:35.025-08:00Какой план дальше?Какой план дальше?A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-84191580983902555372011-02-19T04:22:58.555-08:002011-02-19T04:22:58.555-08:00Они так где-то используются, для перевода строк в ...Они так где-то используются, для перевода строк в в keywords. Я добивался того, что бы этот код компилировался и тянул всё, что надо.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-1134478631004118812011-02-19T04:21:52.641-08:002011-02-19T04:21:52.641-08:00А зачем эти known words?А зачем эти known words?A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-33301187291845109042011-02-19T04:14:01.891-08:002011-02-19T04:14:01.891-08:00@Anton Vodonosov
Не, совсем совместимость не полу...@Anton Vodonosov<br /><br />Не, совсем совместимость не получится. Но если Edi согласится использовать такой слой (в чём я, правда, сомневаюсь), то это не будет проблемой. В конце концов, Hunchentoot и так часто нарушает совместимость от версии версии.<br /><br />Но тут же есть другой путь. Не обязательно юзать это внутри Hunchentoot, можно сделать обёртку над Hunchentoot путём определения интерфейсов из protocol.lisp.<br /><br />> know-words.lisp<br /><br />Да, точно, спасибо. Кстати, этот файл пришлось выдергивать аж из chunga.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-6761069757232026062011-02-19T04:09:14.970-08:002011-02-19T04:09:14.970-08:00Значит мелких несовместимостей не избежать. Condit...Значит мелких несовместимостей не избежать. Condition в hunchentoot в hunchentoot включали слово hunchentoot и пришлось переименовать (huncentoot-error -> wsal-error).<br /><br />Кстати, опечатка в названии файла - know-words.lisp (knowN имелось в виду)A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-58469627696075852062011-02-19T04:04:14.602-08:002011-02-19T04:04:14.602-08:00Ух ты, вот это круто. Хотел бы я так же быстро пер...Ух ты, вот это круто. Хотел бы я так же быстро переходить от идей к реализации, а то они у меня в голове роятся и создают избыточное давление изнутри.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-88767632119577331622011-02-19T03:37:54.892-08:002011-02-19T03:37:54.892-08:00@Anton Vodonosov
Пока ты это писал, я это уже сд...@Anton Vodonosov <br /><br />Пока ты это писал, я это уже сделал: https://github.com/archimag/cl-wsal )) Как раз обдумал что в рассылку Hunchentoot написать ))archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-30590205132740987302011-02-19T03:27:06.864-08:002011-02-19T03:27:06.864-08:00Это интересно. Вот такие детали я не продумывал.
...Это интересно. Вот такие детали я не продумывал. <br /><br />Вот что надумал я к этому моменту.<br /><br />Первую версию API хорошо сделать полностью совместимым с hunchentoot, т.е. взять какое-то подмножество hunchentoot API. <br /><br />Это позволит переносить существующие программы между серверами практически без изменений и облегчит внедрение этого API в лисп сообществе.<br /><br />Если смотреть по Function and Variable Reference в документации hunchentoot (http://www.weitz.de/hunchentoot/), то в API нужно было бы включить: <br /><br />4 Request dispatch and handling<br /> (часть, только самые базовые вещи.<br /> dispatch-table обязательно, может быть<br /> create-prefix-dispatcher, <br /> create-regex-dispatcher, хотя наверное<br /> нет, точно не включать define-easy-handler;<br /> пользователь сам решит, <br /> какую схему request dispatching испльзовать:<br /> кто-то захочет define-easy-handler, кто-то<br /> cl-routes, кто-то напишет что-то свое.<br /> Кстати, для ориентира как раз и смотреть,<br /> какое подмножество использует cl-routes)<br /><br />5 Request objects<br /><br />6 Reply objects<br /><br />7 Sessions<br /><br />8 Customizing session behaviour<br /> (все, почти все?)<br /><br />9 Cookies<br /><br />11 Conditions and error handling<br /> (часть?)<br /><br />12 Miscellaneous<br /> (часть: redirect и url-encode<br /> точно надо, а *cleanup-interval*, <br /> *cleanup-function* точно на надо)<br /><br />Остальная часть hunchentoot API (acceptors, taskmasters, logging, и т.д.) это не интерфейс меду веб приложением и веб сервером,<br />а интерфейс конфигурирования и запуска самого веб сервера. На других серверах он будет свой (в google app engine особенно сильно отличаться будет). <br /><br />Было бы хорошо, определиться с набором функций и вынести в отдельный пакет, например cl-web или что-нибудь в этом роде. <br /><br />Потом было бы очень хорошо, если бы hunchentoot разработчики поддержали эту инициативу и чтобы hunchentoot перешел на использование этого пакета. Т.е. чтобы не экспортировал эти символы из пакета hunchentoot, а использовал новый пакет.<br /><br />Тогда лисп веб приложения стали бы портируемыми между разными серверами. <br /><br />А дальше можно было бы исследовать варианты реализации этого API под другими серверами, написания лисп серверов, и пути расширения этого API.<br /><br />Как вы это прокомментируете? Каких сложностей я не заметил? <br /><br />Конечно, выделение и формулирование API лучше всего делать методом "разведки боем", т.е. реализовать его под каким-то другим сервером.<br /><br />Идея с mongrel2 мне нравится больше всего. Каждый из вариантов, которые я предлагал заточены только под один лисп (ecl либо abcl).<br /><br />Интересно, что hunchentoot начинался именно <br />как лисп адаптер к фронтэндам вроде mod_lisp и другим, и только со временем, когда оказалось<br />что он содержит _почти_ все компоненты нужные для целого веб сервера, Edi Weitz решил добавить недостающие части.<br /><br />http://www.weitz.de/hunchentoot/#historyA. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-58561041120385010092011-02-18T23:46:03.943-08:002011-02-18T23:46:03.943-08:00@Anton Vodonosov
Кстати, если говорить о nginx и...@Anton Vodonosov <br /><br />Кстати, если говорить о nginx и apache, то там схожая ситуация, ибо в nginx есть возможность асинхронной работы, а в apache нет. По моей задумке должен быть базовый интерфейс для синхронного исполнения плюс расширенный, для поддержки асинхронности.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-24002238334334483412011-02-18T20:25:08.418-08:002011-02-18T20:25:08.418-08:00Уточню, насчет встраивания ECL в апач, чтобы не ду...Уточню, насчет встраивания ECL в апач, чтобы не думали что это химера. ECL фактически уже встраивается в апач с помощью mod_ecl. <br /><br />Т.е. задача, так же как и для mongrel2 сводится к адаптации API. <br /><br />В nginx есть втроенный перл, т.е. есть API между nginx и встроенным перлом. Можно этот же API использовать для ECL, и тогда опять же задача сводится к адаптации API.<br /><br />Короче говоря, общий API для веб программирования в Common Lisp - дело действительно достойное и назревшее. <br /><br />Я рад слышать, что не у меня одного такие мысли, я не был уверен что кто-то еще будет это считать полезным.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-83895589657973795542011-02-18T20:15:37.678-08:002011-02-18T20:15:37.678-08:00Мне эта мысль приходила тоже (о выделении общего A...Мне эта мысль приходила тоже (о выделении общего API). А последних несколько дней крутится в голове особенно!<br /><br />Я хочу предложить выделение общего API для работы с веб серверами в качестве проекта для google summer of code под руководством lispnyc. <br /><br />Не знал про mongrel2. Я думал например использовать этот API чтобы встроить ECL в апач или в nginx, либо ABCL на google app engine.<br /><br />API конечно лучше делать на основе того, что сейчас есть в hunchentoot, чтобы можно было запускать существующие веб приложения в новой среде без портирования.A. V.https://www.blogger.com/profile/12081946569115359377noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-59310738998477295692011-02-18T09:10:07.551-08:002011-02-18T09:10:07.551-08:00Весьма интересная задача, эх сейчас для меня не ре...Весьма интересная задача, эх сейчас для меня не резон( Возможно через 1-2 месяца, если будет всё ещё актуально.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-45804389407782136372011-02-18T01:20:06.063-08:002011-02-18T01:20:06.063-08:00@Dmitry
Поравочка, с Mongrel2 )) Да, конечно, чер...@Dmitry<br /><br />Поравочка, с Mongrel2 )) Да, конечно, через ZeroMQ. Собственно, эта часть самая простая и уже реализована. Есть https://github.com/vseloved/cl-mongrel2, который я форкнул.archimaghttps://www.blogger.com/profile/07997791035847047137noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-53091289418187088692011-02-17T23:28:26.490-08:002011-02-17T23:28:26.490-08:00А как ты собираешься делать связку lisp c Mongrel?...А как ты собираешься делать связку lisp c Mongrel? Через ZeroMQ?Dmitryhttps://www.blogger.com/profile/17434341697941378483noreply@blogger.comtag:blogger.com,1999:blog-5411819754291292105.post-82744495507014542072011-02-17T20:13:36.904-08:002011-02-17T20:13:36.904-08:00Поучаствую с удовольствиемПоучаствую с удовольствиемrigidushttps://www.blogger.com/profile/02878404387716367105noreply@blogger.com