Прочитав недавний топик про использование C++ и fastcgi, я наконец-то решился опубликовать свои наработки на тему Web и C++.
Существующие решения, с моей точки зрения, реализуют простые вещи сложным образом. Моей целью было устранить это досадное недоразумение, написав библиотеку, которая позволит писать эффективные кросс-платформенные веб-приложения на С++ так же легко и быстро, как и на PHP, Python, Java, и т.д.
Чтобы не мучать читателя ожиданием, перейдём сразу к коду простейшего приложения, написанного с помощью этой библиотеки (страница проекта на Google Code, лицензия MIT).
Исходный код Main.h
Исходный код Main.cpp
- #ifndef _MAIN_H
- #define _MAIN_H
- #include <WebToolkit.h>
- class HelloWorld:public IHttpRequestHandler
- {
- private:
- Server server;
- public:
- HelloWorld();
- void Run();
- void Handle(HttpRequest* request,HttpResponse* response);
- };
- #endif
Этому приложению вообще не нужен сторонний веб-сервер. Получается обычный исполняемый файл (размер в Windows — 29 Кб), который можно просто взять и запустить. Результат его выполнения Вы можете увидеть в самом начале статьи.
- #include "Main.h"
- HelloWorld::HelloWorld():server(8080,"0.0.0.0")
- {
- server.RegisterHandler(this);
- }
- void HelloWorld::Run()
- {
- server.Run();
- }
- void HelloWorld::Handle(HttpRequest* request,HttpResponse* response)
- {
- response->Write("<html><body><h1>Hello, world!</h1></body></html>");
- }
- int main()
- {
- try
- {
- HelloWorld app;
- app.Run();
- }
- catch(exception& e)
- {
- cout<<e.what()<<endl;
- }
- }
Библиотека кроссплатформенна, её можно использовать и в Windows, и в Linux (кстати, есть желающие портировать под FreeBSD или MacOS?). Её малый размер позволяет веб-приложениям выполняться в embedded-системах. Например, на роутере (я проверил на своём домашнем, ASUS WL-500gP V1, с установленной прошивкой OpenWRT).
А если использовать какую-нибудь встраиваемую БД, например, sqlite, то можно создать приложение, которое полностью выполняется в одном процессе. А это значит, что не будет тратиться лишнее время на межпроцессное взаимодействие. Выгода очевидна — скорость. А учитывая, что сама программа написана на С++, то, возможно, это ключ к написанию самых быстрых веб-приложений. :)
И, в качестве бонуса — готовое к применению приложение — файловый сервер (скачать можно там же):
Вкусности:
- Легковесный
- Кросс-платформенный
- Очень простая настройка
- Поддерживает пользовательские стили
- Поддерживает докачку файлов
- Поддерживает юникод в именах файлов
Понравилось? Присоединяйтесь! :)