Pull to refresh

Разработка web-приложений на C++

Reading time 2 min
Views 56K

Прочитав недавний топик про использование C++ и fastcgi, я наконец-то решился опубликовать свои наработки на тему Web и C++.

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

Чтобы не мучать читателя ожиданием, перейдём сразу к коду простейшего приложения, написанного с помощью этой библиотеки (страница проекта на Google Code, лицензия MIT).

Исходный код Main.h
  1. #ifndef _MAIN_H
  2. #define _MAIN_H
  3.  
  4. #include <WebToolkit.h>
  5.  
  6. class HelloWorld:public IHttpRequestHandler
  7. {
  8. private:
  9.         Server server;
  10. public:
  11.         HelloWorld();
  12.         void Run();
  13.         void Handle(HttpRequest* request,HttpResponse* response);
  14. };
  15.  
  16. #endif

Исходный код Main.cpp
  1. #include "Main.h"
  2.  
  3. HelloWorld::HelloWorld():server(8080,"0.0.0.0")
  4. {
  5.         server.RegisterHandler(this);
  6. }
  7.  
  8. void HelloWorld::Run()
  9. {
  10.         server.Run();
  11. }
  12.  
  13. void HelloWorld::Handle(HttpRequest* request,HttpResponse* response)
  14. {
  15.         response->Write("<html><body><h1>Hello, world!</h1></body></html>");
  16. }
  17.  
  18. int main()
  19. {
  20.         try
  21.         {
  22.                 HelloWorld app;
  23.                 app.Run();
  24.         }
  25.         catch(exception& e)
  26.         {
  27.                 cout<<e.what()<<endl;
  28.         }
  29. }

Этому приложению вообще не нужен сторонний веб-сервер. Получается обычный исполняемый файл (размер в Windows — 29 Кб), который можно просто взять и запустить. Результат его выполнения Вы можете увидеть в самом начале статьи.

Библиотека кроссплатформенна, её можно использовать и в Windows, и в Linux (кстати, есть желающие портировать под FreeBSD или MacOS?). Её малый размер позволяет веб-приложениям выполняться в embedded-системах. Например, на роутере (я проверил на своём домашнем, ASUS WL-500gP V1, с установленной прошивкой OpenWRT).

А если использовать какую-нибудь встраиваемую БД, например, sqlite, то можно создать приложение, которое полностью выполняется в одном процессе. А это значит, что не будет тратиться лишнее время на межпроцессное взаимодействие. Выгода очевидна — скорость. А учитывая, что сама программа написана на С++, то, возможно, это ключ к написанию самых быстрых веб-приложений. :)

И, в качестве бонуса — готовое к применению приложение — файловый сервер (скачать можно там же):

Вкусности:
  • Легковесный
  • Кросс-платформенный
  • Очень простая настройка
  • Поддерживает пользовательские стили
  • Поддерживает докачку файлов
  • Поддерживает юникод в именах файлов

Понравилось? Присоединяйтесь! :)
Tags:
Hubs:
+114
Comments 174
Comments Comments 174

Articles