С++ Web Services
Apr. 2nd, 2012 01:38 amВозникла идея в рабочей системе вообще отказаться от интерпретируемых языков. Статику отдавать через Apache, клиента сделать на статическом JavaScript, а динамику отдавать через FastCGI из своего C++ приложения в XML/JSON.
В теории идея выглядит вполне работоспособной. Однако мысль о том, что придётся переизобретать маленькую роту велосипедов, которые в Rails/Django вылизывались годами, меня очень смущает. Гугление уже существующих решений (и их обсуждений типа - раз два три четыре) дало такие примеры:
CppCMS: похоже, довольно полная библиотека для написания приложения. Всё как у взрослых: кое-какие routes, контроллеры, темплейты+views+шкуры и всё прочее. Немного смущает что, как и другие фреймворки, у них свои строки, массивы и прочие базовые классы. Но в целом - кажется приемлемо.
Wt: любопытная widget-ориентированная библиотека для написания веб-систем. Оригинальная, но уж очень самобытная. А к самобытным системам ни Dojo не прикрутишь, ни программистов потом не найдёшь. Плавали - знаем.
TreeFrog: похоже на попытку аккуратного портирования Rails на плюсы, но результат непонятный: проект молодой, документация почти несуществующая.
ffead: занятная штука, судя по всему написанная сумасшедшим Java-программистом, который почему-то начал писать на C++. Посмотреть конечно прикольно, но не брать же это в production.
CPP SERV: уже другие безумные Javaнцы переписывали на C++ - на этот раз servlets. Однако года три назад вылечились и бросили это дело.
Есть ещё кучка библиотек помельче для разработки мини-сервисов: Klone, PoCo, NanoGear, REST CGI. Но с ними опять придётся выстраивать собственно архитектуру с самого начала. А не хочется.
Выходит, особенного изобилия веб-приложений на C++ не наблюдается. И начинают закрадываться сомнения - может быть, миллионы мух не могут ошибаться, тысячи программистов уже пробежали этот марафон по граблям и разбрелись кто куда?
Вот, сижу теперь, думаю... Записываться в экстремалы с такой системой или плюнуть и откопать PHP?
no subject
Date: 2012-04-02 05:54 am (UTC)Я вот только не понял, зачем тебе мегафреймворки для отдачи данных в ххмль/джсон?
no subject
Date: 2012-04-02 01:58 pm (UTC)no subject
Date: 2012-04-02 07:00 am (UTC)Просто проверить параметры, взять данные из базы селектом и завернуть в json/html? Ну так в этом случае 80%-90% времени будет работать база, да и алгоритмы декорирования в том же пыхапе до блеска отлажены.
Или у вас там какая-то сложная математика, которую считать долго, и нужны какие-то хитрые алгоритмы? Ну и всё равно, джедаи в этом случае советуют считать на плюсах и складывать данные в базу в memory-таблицу. А отдавать апачу всё равно предназначенным для этого инструментом.
no subject
Date: 2012-04-02 02:56 pm (UTC)no subject
Date: 2012-04-02 07:54 am (UTC)no subject
Date: 2012-04-02 08:07 am (UTC)если проект не маленький, можно посмотреть на связку NGinx+Apache/PHP или вообще NGinx+PHP-FPM.
я для интереса поднял связку NGinx+Apache+PHP-FPM, так он летает куда шустрее, чем на Apache+FastCGI, на котором живут остальные сайты.
а с последней - вынес статику (картинки статей) на паре вордпрессов в субдомен на NGinx, тоже весьма неплохо.
no subject
Date: 2012-04-02 08:10 am (UTC)no subject
Date: 2012-04-02 08:18 am (UTC)no subject
Date: 2012-04-02 08:37 am (UTC)Есть джанго/райлс/пирамида/whatever, нахрен нужен этот пхп вообще?
no subject
Date: 2012-04-02 08:50 am (UTC)с этими яйцами и прочими прелестями. 100500 раз объяснял этой скотине, этому жЫвотному, куда класть свои яйца. несколько раз он их пытался откладывать в разные места совершенно без каких-либо очевидных причин, а сколько велосипедов на эту тему, ухх. но починить таки удалось, каким-то телепатическим способом. =)
Ruby тоже веселая штука, милион версий, не дай Боже поставишь что-то поновее со старым - все, велосипед не едет. но тоже удалось полечить, указал в файле версии, которые подгружать. телепатия рулит))
no subject
Date: 2012-04-02 08:56 am (UTC)Билдаут же обычно деревянный, кладет куда попросишь.
no subject
Date: 2012-04-02 09:10 am (UTC)PYTHON_EGG_CACHE
python-eggs
вот по этим словам можете поискать.
no subject
Date: 2012-04-02 09:13 am (UTC)PS Впрочем допускаю, что делающий make install от рута идиот, потому что не осилил инструкцию даже до середины.
no subject
Date: 2012-04-02 09:19 am (UTC)no subject
Date: 2012-04-02 09:16 am (UTC)no subject
Date: 2012-04-02 09:20 am (UTC)просто клиент попросил поставить такой велосипед, пришлось ставить))
no subject
Date: 2012-04-02 09:38 am (UTC)1 -- virtualenv (типа чрута, но исключительно для интерпретатора -- влияет на его пути поиска, и яйцеустановку), бонус -- изоляция от "системных" питонопакетов
2 -- buildout -- строит песочницу с наполнением по формальному описанию, чем-то издалека похоже на bsd порты. Полной изоляции не делает, но может быть засунуто в virtualenv. Зато гарантирует возспроизводимость (особенно если ты прикопал за угол все скачаное в процессе).
Туториал по билдауту от автором джанги
http://jacobian.org/writing/django-apps-with-buildout/http://jacobian.org/writing/django-apps-with-buildout/
(впрочем телега тоже устарела, но как отправная точка сгодится)
http://buildout.org -- родная документация, которой хер знает сколько лет, внутри исходников она поактуальнее.
Если есть вопросы, могу ответить.
no subject
Date: 2012-04-02 10:00 am (UTC)no subject
Date: 2012-04-02 03:12 pm (UTC)no subject
Date: 2012-04-02 11:11 am (UTC)no subject
Date: 2012-04-04 02:22 pm (UTC)no subject
Date: 2012-04-02 11:25 am (UTC)Если стоит Apache то почему бы не посмотреть на mod_perl скорость просто идеально вшитая внутрь Apache кишков, отлаживать легче, хотя надо быть и аккуратнее с "мусором", но всё же разработка быстрее будет в разы, имхо.
А не хочется связываться с perl, полно интрументов например в ruby и ниже rails уровня, как sinatra или прям на голый rack садиться.
no subject
Date: 2012-04-02 03:10 pm (UTC)no subject
Date: 2012-06-11 03:36 pm (UTC)как JSON-RPC вполне рабочий фреймворк, для этого есть отдельный вид асинхронного приложения "cppcms::rpc::json_rpc_server" (http://cppcms.com/wikipp/en/page/cppcms_1x_json_rpc)
сейчас как раз пишу для него фронтенд для более простой и быстрой разработки собственных приложений (типа Kotti в Pyramid Python-проекта Pylons), надеюсь уже скоро открою для тестирования :)
no subject
Date: 2012-10-18 02:43 pm (UTC)no subject
Date: 2012-10-18 06:45 pm (UTC)no subject
Date: 2012-10-24 03:59 pm (UTC)Целей несколько:
- Производительность, снижение требований к инфраструктуре
- Качество, C++ позволяет лучше структурировать код, чем остальные языки Web разработки, за исключением Java C#
- Кросс-платформенность, чем не может похвастаться C#
- Наличие огромного массива С++ приложений, который можно переиспользовать.
no subject
Date: 2012-10-24 07:07 pm (UTC)Если нет внешних ограничений на язык реализации веб-приложения - надо таки-брать Ruby, Python или хотя бы Perl с соответствующим фреймворком и прикручивать бизнес-логику на любом языке. Скорость начальной разработки будет выше на порядок, причём по нескольким причинам. Во-первых, веб - это строки, а строки в плюсах - это совсем не центровое в отличие от скриптовых языков. Во-вторых, тыщи готовых модулей под скриптовые фреймворки с большой вероятностью позволят за считаные часы наваять работоспособный прототип. В-третьих, тестирующие фреймворки опять же за короткое время помогут зафиксировать внешние требования в наборах тестов всех уровней.
В общем, веб-системы надо писать на скриптовых языках. Ну или на Node.js если хочется ещё и остроты ощущений.
no subject
Date: 2012-10-27 01:49 am (UTC)Тестовые фреймворки в зависимости от того, к какому месту их подключать: либо не зависят от языка реализации, либо для С++ их тоже достаточно.
А вот практически полное отсутствие готовых библиотек для разработки Web на С++, действительно, настораживает.