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

Отличия "Пример: Hello World (v 1.x)" вер. 2 сравн. вер. 3

Содержимое:

Давайте напишем наше первое CppCMS-приложение.
Для начала создадим файл hello.cpp и сохраним в нем следующее содержание.
_Includes:_
Нам необходимо импортировать некоторые определения для первого приложения:
- `cppcms/application.h` - класс `application`, из которого наследуется каждое приложение CppCMS.
- `cppcms/applications_pool.h` - класс `applications_pool`, управляющий пользовательскими приложениями - создает новое приложение при каждом HTTP-запросе, кэшируя го для будущего использования.
- `cppcms/applications_pool.h` - класс `applications_pool`, управляющий пользовательскими приложениями - создает новое приложение при каждом HTTP-запросе, кэшируя его для будущего использования.
- `cppcms/service.h` - севис - центральный цикл событий сетевого сервиса.
- `cppcms/http_response.h` - класс, в котором происходит формирование HTTP-ответа клиенту.
Давайте подключим их все.
#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <iostream>
Теперь определим первый класс приложения, наследуемый из `cppcms::application`. Он должен получить в своем конструкторе ссылку на основной сервис CppCMS, который запускает наше приложение.
class my_hello_world : public cppcms::application {
public:
my_hello_world(cppcms::service &srv) :
cppcms::application(srv)
{
}
virtual void main(std::string url);
};
На этом этапе, чтобы отвечать на пользовательские запросы переопределим функцию-член класса `cppcms::application::main`, которая всегда вызывается в каждом запросе.
В этой функции запишем простой HTML в поток вывода.
Доступ к потоку вывода осуществляется с использованием функции-члена `response` класса `application`, дающей доступ к потоку вывода `out()`.
void my_hello_world::main(std::string /*url*/)
{
response().out()<<
"<html>\n"
"<body>\n"
" <h1>Hello World</h1>\n"
"</body>\n"
"</html>\n";
}
Теперь подготовим функцию main. Для начала создадим класс сервиса, который парсит параметры командной строки и ищет опции конфигурации
int main(int argc,char ** argv)
{
try {
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`.
srv.run();
}
catch(std::exception const &e) {
std::cerr<<e.what()<<std::endl;
}
}
Вот наше приложение и готово. Теперь можно скомпилировать его также просто как:
c++ hello.cpp -lcppcms -o hello
Теперь нужно подготовить конфигурационный файл `config.js`, использующий файловый формат JSON для передачи всех опций:
{
"service" : {
"api" : "http",
"port" : 8080
},
"http" : {
"script_names" : [ "/hello" ]
}
}
Мы настроили сервис слушать порт 8080, используя протокол HTTP (что очень полезно для отладки приложения).
Также мы передали параметр `script_names`, определяющий путь к виртуальным "CGI скриптам" или, проще говоря, путь, по которому должно вызываться наше приложение.
Теперь можно запустить приложение
./hello -c config.js
Наберем в браузере ссылку <http://localhost:8080/hello>, чтобы увидеть наше первое рабочее CppCMS-приложение.

Проект

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

Размещение

SourceForge.net Logo

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

CppCMS needs You


Навигация

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


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