Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах. Закрыт 7 лет назад. Сообщество рассмотрело необходимость повторного открытия этого вопроса 11 месяцев назад и оставило его закрытым: Исходные причины закрытия не были исправлены
Улучшить вопрос
Здравствуйте! Видел, но не нашёл нужных статей. Кто имеет опыт, как делать сайт на C++ и какие подводные камни? Можно ли работать с SQLITE? Спасибо.
Ответ Можно но геморно. Работать можно с какой угодно СУБД. Хоть свою собственную пиши. Подсказать могу только под windows. Веб сервер IIS. Вариант 1: самый простой через CGI. Вывод такой std::cout << "<br>
HTML
" Недостатки: Для каждого запроса запускается отдельный процесс, а по завершении закрывается. Это приводит к серьезному снижению производительности. Вариант 2: Использовать протокол fastcgi. Здесь вывод будет через функцию в("
HTML
")
Тестирование. hello world: C++ (fastcgi) ~ 12000/сек.(свыше 12000 кидаются исключения из w3wp.exe) php (fastcgi) - 6300/сек. perl (isapi) - 2200/сек. python (isapi) - 15280/сек. (кэширование) python (cgi) - 74/сек. 150000 циклов с операциями сложения и умножения: C++ - 5500/сек.(long long) php - 220/сек. в 25 раз perl - 48/сек. в 114 раз python cgi - 34/сек. в 161 раз 50000 циклов. вывод счётчика i (нагрузка на сеть) C++ - 950/сек. php - 750/сек. perl - 7/сек. python cgi - 9/сек. @nolka Наверное 50000 в сек. у меня было в режиме балансировки нагрузки для нескольких серверов. А php запускался не как fastcgi, а как cgi. Но всё равно результат показателен. Проблемы:
нет инструментов. Придется самому писать. не факт что готовый сайт будет работать быстрее. Если уровень программиста не очень высокий, то вероятнее всего производительность окажется гораздо хуже чем такой же сайт написанный на специализированном языке.. хостинг не подойдёт. Нужен виртуальный выделенный сервер. Необходимо грамотно реализовать отдельную обработку get, post запросов. обработку загрузки файла(через post), обработку отдачи изображения(для captcha например). работу с заголовками(иногда требуется вывести заголовок в зависимости от результатов, во время выполнения). обработка ajax запросов так же разная. Это нужно учитывать как для всего приложения(отдельный exe на ajax обработку), так и для обработки post get через ajax. Опять же по разному там приходят все переменные сервера. И если не знать хорошо протокол http, то в коде будет множество заплаток. Если среда разработки не поддерживает работу в кодировке utf-8, то будет много всяких to_utf8() to_ansi(). кодирование строки запроса urldecode() от разных браузеров разный. Придётся использовать связку библиотеки curl + обычное hex декодирование. При ajax запросе лучше сразу всё оборачивать в urlencode от javascript. Естественно если на сайте есть flash или другой язык, он также будет по разному всё кодировать. Придётся влезать в исходники этих flash и там всё изменять.
нет готовых "скриптов" для тех или иных задач для сервера. Всё нужно разрабатывать с нуля.
В принципе писать на Си для web, это как писать gui на ассемблере. Плюсы:
при грамотном исполнении, скорость выполнения программы будет очень высокой. (например до цикла приёма запросов, процесс собирает требуемые данные с диска, и помещает их в память, где сортирует и индексирует). Соединения с субд устанавливается до цикла приёма запросов. познакомитесь с внутреннем устройством протокола http. Возможно еще с tcp/ip, dns, smtp, pop. при грамотном исполнении и настройке хостинга, сайт невозможно будет взломать. Взломщикам придётся изучать его структуру.(а не так: в joomla версии 1.5.241 найдена уязвимость, всем пользователям этой версии следует скачать патч, иначе взломщики могут...) Всё зависит от разработчика. Никакая новая версия языка не должна привести к проблемам.(а-ля в версии 2.1507ab удалены устаревшие... или в этом языке подобные моменты невозможны.) Нет никаких утечек конфиденциальной информации. CMS(WordPress к примеру) могут содержать специальные инструкции по передаче определенной информации в центры анализа данных ЦРУ или стать неработоспособными в определенный момент.
Инструкция: Windows. веб сервер IIS. Протокол CGI. 1) Создаешь консольное приложение C++. 2) убираем предварительно скомпилированный заголовок. 3) Запускаем консоль IIS. сайты -> добавить веб сайт. имя: CGI путь: C:\inetpub\CGI ОК Заходим на этот сайт в консоли. 4)Документ по умолчанию: index.wpp 5)Типы mine: .wpp text/html 6)Далее в папке C:\inetpub\CGI создаем пустой файл index.wpp. 7) В С++ проект помещаем строки #include int main() { std::cout << "<br>Привет мир С++ в web!" return 0 } 8) Компилируем. Берем exe файл. допустим это CGI.exe кладем в папку C:\inetpub\CGI 9) дальше идем снова в настройки IIS -> сайты -> CGI -> сопоставление обработчиков -> добавить сопоставление модуля. путь запроса: *.wpp модуль: cgimodule исполняемый файл: "C:\inetpub\CGI\CGI.exe" имя: главный да. 10) Всё теперь идем по ip который указан в привязках сайта. Браузер отобразит строку приветствия.
Инструкция: Windows. веб сервер IIS. Протокол FASTCGI. 1) Качаем libfcgi2 отсюда http://www.coastrd.com/download вот это: DLL library + headers for C/C++, Delphi, VB & other BASICs 2) Из архива папку С++ кладем в папку include среды разработки. Lib в папку с lib файлами, а dll в папку С:/include/fastcgi test 3) По этой ссылке смотрим как сконфигурировать сам IIS http://www.coastrd.com/cgioniis7 в принципе не отличается от CGI метода, надо только выбрать модуль не cgimodule, а fastcgimodule. 4) Создаем новый проект консольный.(только x32) В него добавляем такие строчки #ifndef _FCGXAPP_H #include #endif #pragma comment(lib, "libfcgi2.lib") #include // функция вывода static inline void v(const std::string & text , FCGX_REQUEST & FCGI) { FCGX_PutStr( text.data(), text.size(), FCGI.pOut) } static inline std::string int_to_string(int integ) { if(integ == 0){ return "0" } char * buffer = new char [32] _itoa_s(integ, buffer,32, 10 ) return buffer } static inline void v(const int & integ , FCGX_REQUEST & FCGI) { std::string global_string = int_to_string(integ) FCGX_PutStr( global_string.data(), global_string.size(), FCGI.pOut) } int main() { // счётчик запросов long long count_fastcgi = 0 FCGX_REQUEST FCGI = { 0 } FCGX_InitRequest( &FCGI, 0, 0 ) std::string first = "Content-Type: text/html charset=utf-8 X-Powered-By: C++ Access-Control-Allow-Origin: *
" while( FCGX_Accept_r(&FCGI) == 0 ) { // Вывод заголовков. FCGX_PutStr( first.data(), size_, FCGI.pOut ) // переменные сервера for(int i = 0 i < FCGI.nParam i++) { v(" " , FCGI) v(FCGI.envp[i] , FCGI) } } // цикл return 0 } 5) После компиляции кладем fastcgi.exe в папку С:/include/fastcgi test Добавляем сопоставление модуля в IIS. Тоже самое как в cgi, только указать не cgimodule, а fastcgimodule. Если всё заработало, берем apache jmeter(который кстати на java написан -> жутко глючит) , выставляем полную оптимизацию в компиляторе и смотрим сколько страниц сможет обработать. Главное чтобы сам этот jmeter не завис.