Главная  /  Правка  /  История  /  Логин  /  Область пользователей

Пример: Hello World (v 1.x)

Давайте напишем наше первое CppCMS-приложение.

Для начала создадим файл hello.cpp и сохраним в нем следующее содержание.

Includes:

Нам необходимо импортировать некоторые определения для первого приложения:

Давайте подключим их все.

  1. #include <cppcms/application.h>  
  2. #include <cppcms/applications_pool.h>  
  3. #include <cppcms/service.h>  
  4. #include <cppcms/http_response.h>  
  5. #include <iostream>  

Теперь определим первый класс приложения наследующий cppcms::application. Он должен получить в своем конструкторе ссылку на основной сервис CppCMS, который запускает наше приложение.

  1. class my_hello_world : public cppcms::application {  
  2. public:  
  3.     my_hello_world(cppcms::service &srv) :  
  4.         cppcms::application(srv)  
  5.     {  
  6.     }  
  7.     virtual void main(std::string url);  
  8. };  

На этом этапе, чтобы отвечать на пользовательские запросы переопределим функцию-член класса cppcms::application::main, которая всегда вызывается в каждом запросе.

В этой функции запишем простой HTML в поток вывода. Доступ к потоку вывода осуществляется с использованием функции-члена response класса application, дающей доступ к потоку вывода out().

  1. void my_hello_world::main(std::string /*url*/)  
  2. {  
  3.     response().out()<<  
  4.         "<html>\n"  
  5.         "<body>\n"  
  6.         "  <h1>Hello World</h1>\n"  
  7.         "</body>\n"  
  8.         "</html>\n";  
  9. }  

Теперь подготовим функцию main. Для начала создадим класс сервиса, который парсит параметры командной строки и ищет опции конфигурации.

  1. int main(int argc,char ** argv)  
  2. {  
  3.     try {  
  4.         cppcms::service srv(argc,argv);  

Затем укажем классу applications_pool использовать наше приложение - my_hello_world предоставляя его предопределенной фабрике объектов cppcms::applications_factory<my_hello_world>(). Мы, так сказать, примонтировали наше приложение к пулу, чтобы оно использовалось для обработки запроса. srv.applications_pool().mount(cppcms::applications_factory<my_hello_world>());

И теперь запустим цикл событий (event loop). Функция run() завершается, если процесс получает сигналы SIGINT, SIGTERM или SIGUSR1.

  1.     srv.run();  
  2. }  
  3. catch(std::exception const &e) {  
  4.     std::cerr<<e.what()<<std::endl;  
  5. }  

Вот наше приложение и готово. Теперь можно скомпилировать его также просто как:

  1. c++ hello.cpp -lcppcms -o hello  

Теперь нужно подготовить конфигурационный файл config.js, использующий файловый формат JSON для передачи всех опций:

  1. {  
  2.     "service" : {  
  3.         "api" : "http",  
  4.         "port" : 8080  
  5.     },  
  6.     "http" : {  
  7.         "script_names" : [ "/hello" ]  
  8.     }  
  9. }  

Мы настроили сервис слушать порт 8080, используя протокол HTTP (что очень полезно для отладки приложения).

Также мы передали параметр script_names, определяющий путь к виртуальным "CGI скриптам" или, проще говоря, путь, по которому должно вызываться наше приложение.

Теперь можно запустить приложение

  1. ./hello -c config.js  

Наберем в браузере ссылку http://localhost:8080/hello, чтобы увидеть наше первое рабочее CppCMS-приложение.

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0