Существуют ли какие-либо концептуальные недостатки при создании веб-приложения на C ++ и MySQL?

10

Я унаследовал довольно интересный проект, в котором есть хорошая возможность взять существующее программное обеспечение и превратить его в веб-приложение SaaS. Поскольку проект наследуется, база кода / каркас уже определены как C ++ и MySQL. Само приложение компилируется и запускается как EXE на Windows Server. Пользовательский интерфейс веб-и приложение работает как своего рода сервер. Из того, что я знаю о современных веб-приложениях, это, возможно, необычный выбор. В наши дни большинство людей предпочитают PHP-фреймворк или Ruby on Rails. Конечно, такое впечатление я получаю от чтения блогов на эту тему. Итак, мне очень интересно узнать, является ли C ++ EXE, поддерживаемый MySQL, прочной основой для веб-приложения, или мы должны искать возможность построить по-другому?

jnthnclrk
источник
То, что вы описываете, больше похоже на серверный процесс, а не на веб-приложение. А для серверных процессов PHP или RoR, безусловно, являются необычным выбором. Какие проблемы у вас на самом деле?
Бенджамин Банье
Возможно, исполняемый файл использует новое Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) или он фактически реализует свой собственный HTTP-сервер с нуля? Если первое, то, возможно, они действительно пытались создать очень быстрое приложение, используя C ++ и самостоятельно размещая его для переносимости на клиентские машины.
Джимми Хоффа
Конечно, любой здравомыслящий человек будет использовать что-то вроде Net :: HTTPServer POCO вместо того, чтобы писать HTTP-сервер с нуля. Но это не похоже на RoR или, например, платформы Python не содержат веб-сервера.
Бенджамин Банье
4
Нет ничего необычного в том, чтобы использовать c ++ в качестве бэкэнда веб-приложения. Гугл поиск написан на с ++. Многие из приложений Yahoo c ++. Практически каждое веб-приложение AAA, используемое миллионами людей, написано на c ++.
Лорд Тидус
Да, приложение было разработано как пользовательский веб-сервер. Таким образом, сторона веб-приложения основана на пользовательском интерфейсе администратора HTML и наборе функций.
jnthnclrk

Ответы:

20

Можно создать веб-приложение с использованием C ++, ЕСЛИ преимущества, очевидно, перевешивают стоимость. Google, Amazon, Facebook - все это построено на C ++ для повышения скорости, памяти и энергопотребления, то есть затрат на серверы.

Однако, как вы уже догадались, у C ++ есть для этого недостатки. Это зависит от ваших инструментов, хотя.

Сначала позвольте мне процитировать сайт cppcms по этому поводу :

Когда следует использовать CppCMS.

Язык C ++ далеко не популярен для веб-разработки по многим причинам: отсутствие соответствующих инструментов, навыки разработчиков и многое другое.

Однако есть области, в которых веб-программирование на C ++ с использованием CppCMS становится очень полезным и эффективным, а некоторые - просто трата времени.

Когда CppCMS следует или можно использовать?

1. Высокая загрузка веб-сайтов и приложений с сотнями и тысячами обращений в секунду, где требуется высокая производительность, эффективность и масштабируемость.

2.Применение, для которого требуются масштабируемые технологии Comet / Server Push. CppCMS может эффективно обрабатывать сотни и тысячи одновременных HTTP-соединений с минимальным использованием ресурсов.

3. Встраивание веб-интерфейса в существующие приложения и сервисы C ++ с небольшими затратами на дополнительные библиотеки.

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

Когда не использовать?

Если вы создаете небольшие веб-приложения, которые не требуют больших нагрузок и требуют очень короткого периода выхода на рынок - возможно, такие инструменты, как Django или RoR, будут более подходящими для таких задач.

Недостатки, специфичные для C ++:

  • Время компиляции может быть очень очень очень очень медленным по сравнению с другими языками. Это может повлиять на итерации, интервал выпуска, но также и мораль разработчика. Убедитесь, что оно того стоит.
  • В большинстве случаев вам нужно компилировать изменения. Этого можно избежать, но это обычно.
  • Написание современного C ++ делает его легким (учиться, читать, писать, отлаживать и т. Д.), Но многие разработчики C ++ не знают, что такое Modern C ++. Поэтому, если вы работаете в команде, вам нужно хорошо знать Modern C ++ от всей команды. Если нет, вы легко попадете в очень сложные ошибки. Тем не менее, это больше проблема людей, чем проблема языка. Просто история C ++ не помогла легко понять. Хорошее обучение не так распространено, как в более современных (исторически) языках.
  • Юникод все еще плохо поддерживается основным языком C ++, что делает его потенциальным источником большой боли. Просто используйте UTF-8 везде и некоторые библиотеки (посмотрите на boost) для управления им.
  • Стандарт C ++ не знает, что такое библиотека. Поэтому мы используем обычные способы управления ими на разных компиляторах / компоновщиках / ОС. Это может стать проблемой, если вы начнете получать кросс-платформенный код, который должен загружать / выгружать "на лету" некоторые модули.

Может быть, взглянуть на CPPCMS? Или, может быть, если вы хотите сделать сайт в стиле GUI?

Также проверьте эти вопросы:

Klaim
источник
3
Насколько я понимаю, Facebook запрограммирован на PHP, но они также создали свой собственный компилятор для PHP на C ++ для Linux. Основными причинами, по которым Facebook разработал компилятор, было снижение затрат на электроэнергию для операционных серверов. На самом деле это была не скорость (это быстрее), а тот факт, что для каждого запроса требуется меньше ресурсов процессора. Это проект с открытым исходным кодом, который можно найти здесь. developers.facebook.com/blog/post/2010/02/02/…
Reactgular
1
Да, причины разные, поэтому я упомянул энергию и стоимость серверов. При этом Александреску недавно сказал в интервью, я полагаю, что все больше и больше кода Facebook пишутся непосредственно на C ++, но он не упомянул почему, если моя память верна. Они также предоставляют библиотеку с открытым исходным кодом, полную утилит / алгоритмов C ++: Folly facebook.com/notes/facebook-engineering/…
Klaim
Также обратите внимание, что даже если код сначала пишется на PHP, а затем конвертируется в C ++, 3 из упомянутых мною недостатков остаются верными.
Klaim
2
Еще один веб-фреймворк на C ++: wt (остроумный). Это для людей, которые хотят создавать веб-приложения, которые работают как настольные приложения под капотом. Для портирования это хороший выбор.
К.Стефф
Я думаю, что все эти сайты имеют компоненты, написанные на нескольких языках. С ++, скорее всего, используется в качестве оптимизации для разделов кода, которые требуют тонкой настройки управления памятью.
Джигги
3

Wordpress, работающий на PHP с несколькими установленными плагинами, ставит мой сервер Winders на колени. Поэтому у меня нет никаких проблем с идеей реализации веб-приложения на C ++. Скорость является важной частью веб-опыта.

Графический дизайн палаток для управления большинством веб-проектов. PHP - неясный язык сценариев, который работает внутри HTML. Позволяя авторам PHP выходить из HTML. В результате есть много преимуществ работы с HTML.

Тем не менее, вы можете реализовать любое количество шаблонов HTML-решений на C ++.

Можно было бы предоставить вам длинный список фреймворков Python и PHP, которые обеспечивают быструю разработку, но если у вас много времени, то C ++ определенно возможен.

То, что я не понимаю, это ваше решение сделать C ++ на Windows. лол

Reactgular
источник
1
Классический аргумент соломенного человека, есть много более быстрых альтернатив WordPress / PHP, которые не являются C ++. Я не говорю, что C ++ не является подходящим выбором, просто ваш аргумент не очень хорошо сформулирован.
Джимми Хоффа
Я с тобой согласен. Я не думаю, что я пытался сделать WordPress альтернативой. Просто мой опыт в последнее время показал, что трудно добиться хорошей производительности из популярных фреймворков.
Reactgular
1
StackExchange работает на платформе ASP.NET MVC. Node.Js отличается малым весом и высокой производительностью, и если вы действительно хотите что-то смехотворно производительное, есть фреймворки Snap или Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript и C # - языки высокого уровня для сбора мусора.
Джимми Хоффа
1
Помните, что скорость выполнения кода на сервере во многих случаях не является ограничивающим фактором в веб-приложении. Большая часть времени уходит на ожидание чего-то (базы данных) или даже внешнего интерфейса (выбор CSS, изображений, выполнение JavaScript, рендеринг HTML)
Иоганнес
1

Это, конечно, необычный выбор. C ++ не был разработан с учетом веб-приложений, и хотя существуют библиотеки для написания, скажем, приложений FastCGI с C ++, вам нужно проделать гораздо больше работы, чтобы запустить ваше основное приложение. «Веб-языки» обычно делают для вас много вещей, которые вы должны получить из других мест C ++, таких как реализация протокола HTTP, генерация HTML и т. Д.

Кроме того, веб-приложения в основном касаются строк, что не является самой сильной стороной C ++ - в самом языке нет встроенного типа строк, что приводит к нескольким изюминкам и делает обработку строк более неуклюжей, чем это было бы в более высокой степени. Языки уровня. Правильная обработка кодировки символов в C ++ граничит с черной магией. И C ++ может действительно очень сильно аварийно работать с довольно невинно выглядящим кодом, что гораздо менее вероятно при использовании языка более высокого уровня (они тоже могут аварийно завершаться, но в большинстве случаев веб-сервер может корректно восстанавливаться, особенно на платформах, использующих определенные - запрос модели жизненного цикла, как в PHP).

Тем не менее, если у вас уже написана большая часть кодовой базы, C ++ все еще может быть жизнеспособным выбором. Вам нужно будет найти некоторые библиотеки, чтобы охватить все виды веб-вещей (особенно, вы хотите иметь возможность либо интегрировать автономный HTTP-сервер в вашу программу, либо подключиться, скажем, к Apache, либо через FastCGI, либо скомпилировать в модуль; вам также понадобится какая-нибудь библиотека шаблонов, которая сделает рендеринг документов HTML безболезненным).

Наконец, есть проблема рынка разработчиков. Существует множество разработчиков на C ++ и даже больше веб-разработчиков, но перекрытие, вероятно, не так велико, поэтому, если вам когда-нибудь понадобится нанять людей для работы над этим, вам будет несколько сложнее, чем, скажем, PHP.

tdammers
источник
1

Как уже говорили другие, концептуально C ++ является прекрасной средой для разработки веб-сервера. Есть, однако, несколько соображений, как вы принимаете это решение.

Популярность языков сценариев для дизайна веб-серверов оборачивается временем. Простые изменения могут быть сделаны легко с демонстрацией результатов почти сразу. Вы обнаружите, что любой хороший дизайн веб-сервера будет предлагать аналогичные возможности. Действительно, C ++ является отличной средой для достижения этой цели.

Ключом к созданию хорошей системы приложений веб-сервера является отделение пользовательского интерфейса от кода. Цель создания среды веб-приложений - избежать «ваш пользовательский интерфейс находится в моем коде, а ваш код - в моем пользовательском интерфейсе».

Я хотел бы тщательно в таких системах, как cppcms. Я ожидаю, что он предлагает что-то подобное.

Вам не нужен язык сценариев, чтобы предложить гибкость и производительность.

Билл Дверь
источник