пятница, 10 сентября 2010 г.

[prog.thoughts] Возможная область использования mongrel2

Недавно я писал о выходе HTTP-сервера mongrel2. Он использует интересную схему взаимодействия с Web-приложениями: приложение оформляется в виде отдельного процесса, а с mongrel2 общается посредством ZeroMQ. Я тогда высказал мысль о том, что это какая-то стремная схема – Web-приложение намертво привязывается к конкретному HTTP-серверу. В комментариях так же была высказана мысль о том, что mongrel2 подойдет только для очень узкого круга задач. А вчера подумалось о потенциальной предметной области, в которой лично я рискнул бы использовать mongrel2.

Сейчас очень модно и востребовано оформлять интерфейсы к различным программулинам через Web-интерфейс. Не суть важно, что это за программулина – какой-нибудь AlwaysUp, система контроля версий (см.например, Fossil), консоль управления ADSL-модемом или корпоративный почтовый сервер. Все равно управление через Web-интерфейс должно быть. И хоть я считаю, что это в большей степени маразматично, чем практично, но раз пользователи хотят, значит нужно Web-интерфейс делать. Но как и на чем? И вот тут, имхо, вещи вроде mongrel2 могут стать мной востребованными.

Скажем, если я пишу какой-нибудь сервер на С++, к которому нужно прикрутить Web-морду, то зачем мне городить огород из какого-то мощного Web-сервера (вроде Apache), [Fast]CGI-скриптов на каком-то языке и канала из CGI-я в мой C++ный сервер? Или даже встраивать какой-нибудь легковесный Web-сервер в собственную программу? Ведь я спокойно могу взять ZeroMQ, встроить в свой сервер логику Web-морды и работать через mongrel2.

На первый взгляд, должно получиться и удобно, и надежно. По крайней мере, выглядит проще, чем с Apache+CGI (что мне приходилось проделывать).

И вот что важно. Мой аргумент о жесткой привязке к конкретному HTTP-серверу будет уже не столь актуален. Поскольку здесь ситуация такая же, как с базовыми библиотеками – какую выбрал, к такой и привязался, и просто так не отвяжешься. Скажем, взял для работы по TCP/IP ACE вместо Boost::Asio и все, уже ничего не изменишь без глобального переписывания. И это нормально.

Поэтому для целей встраивания в C++ные “черные ящики” Web-интерфейса mongrel2 стал для меня заманчивой штукой. Нужно будет “взять на карандаш”.

Отправить комментарий