Drogon C++, O Framework Web Mais VELOZ do Mundo

Foi o primeiro colocado em testes com 105 frameworks, dentre eles: Rails, Django, NestJS, Laravel e entre outros.


Drogon C++, O Framework Web para Back-end Mais VELOZ do Mundo

Drogon é um Framework Web escrito com C++ que funciona nas versões C++14 e também C++17.

O site TechEmpower( link do ranking ) possui alguns serviços de benchmarks que testa desempenho de algumas tecnologias e dentre esses testes, analisou o desempenho de Frameworks Web para Back-end e o Drogon foi o primeiro colocado em testes com 105 frameworks, dentre eles: Rails, Django, NestJS, Laravel e entre outros.

  • O nome Drogon vem do dragão chamado Drogon da série Game of Thrones.
  • Ele está disponível para Linux, macOS, FreeBSD, OpenBSD e Windows.
  • Usa uma biblioteca de rede de E/S sem bloqueio baseada em epoll (e no caso para macOS e FreeBSD usa kqueue) .
  • Tem suporte para o protocolo HTTP 1.0 e 1.1 ( tanto para server-side como para client-side);
  • Tem suporte para cookies e sessões embutidas.
  • Também tem suporte para: HTTPS(com OpenSSL), WebSocket, solicitação e resposta para formato JSON, muito utilizada para API Restful
  • Além de AOP com joinpoints e entre diversas outras funcionalidades.


Dependências

Para instalar, antes você vai precisar de algumas dependências em tempo de compilação e em tempo de execução. Que são elas:

sudo apt install git gcc g++ cmake libjsoncpp-dev uuid-dev openssl libssl-dev zlib1g-dev
  • Para sistemas que utilizam Portage: Gentoo, Funtoo e derivados:
sudo emerge dev-vcs/git jsoncpp ossp-uuid openssl

Ou evitando ambiguidade: sudo dev-vcs/git dev-util/cmake emerge dev-libs/jsoncpp dev-libs/ossp-uuid dev-libs/openssl

  • Para sistemas que utilizam RPM: Fedora, Red Hat e derivados
sudo dnf install git gcc gcc-c++ cmake libuuid-devel openssl-devel zlib-devel 

Banco de dados

Se futuramente você vai desenvolver aplicativos que usam banco de dados(que eu acredito que sim), é extremamente importante você instalá-los antes de instalar o Drogon. Pode ser um dos listados abaixo:

Instalando o Drogon

git clone https://github.com/an-tao/drogon
cd drogon
git submodule update --init
mkdir build
cd build
cmake ..
make && sudo make install

Utilização

Para esse exemplo básico vamos criar uma página estática sem consulta à banco de dados

1. Exemplo 1(O básico do básico)

1.1 - Criando o projeto

cd $HOME
drogon_ctl create project meu-projeto

Agora nosso meu-projeto possui os seguintes arquivos:

meu-projeto/
├── build
├── CMakeLists.txt
├── config.json
├── controllers
├── filters
├── main.cc
├── models
│   └── model.json
├── plugins
└── views

6 directories, 4 files

1.2 - Alterando a porta do arquivo main.cc

O arquivo original main.cc está com a porta 80, mas isso poderá haver um conflito no seu sistema. Então altere, por exemplo, para a porta 8080.

Se também tiver problema com a porta 8080, use a porta 1024 ou tente uma porta maior que ela que não esteja sendo usada, para saber se está sendo usada use o nmap, por exemplo, para descobrir. Não use portas inferiores à 1024 porque devem ser usadas somente para usuários com privilégios(root, por exemplo).

cd meu-projeto
vim main.cc

Com o seguinte conteúdo:

#include <drogon/HttpAppFramework.h>
int main() {
    // Definir endereço e porta para escutar o HTTP
    drogon::app().addListener("0.0.0.0",8080);
    // Carregar arquivo de configuração
    // drogon::app().loadConfigFile("../config.json");
    // Execute a estrutura HTTP, o método será bloqueado no loop de evento interno
    drogon::app().run();
    return 0;
}

E compile:

cd build
cmake ..
make

Agora rode o arquivo binário que foi criado dentro do diretório que vocẽ está(build) . No meu caso, como chamei o projeto de meu-projeto, há um binário com esse nome, então é só executá-lo:

./meu-projeto

Acesse o endereço: http://0.0.0.0:8080/

E acessando você já encontrará um belo 404:

404 Drogon C++

Para “derrubar” a execução do servidor, tecle: Ctrl + C.

Mas isso quer dizer que já está funcionando. Então basta você adicionar uma página HTML(ainda dentro do diretório build) e acessar novamente:

echo '<h1>Servidor com Drogon C++, rodando legal!</h1>' >> index.html
./meu-projeto

E acesse: http://localhost:8080/

E então verá sua página:

Drogon C++ running

2. Criando um Controller

Vamos criar um controller de nome ListController de teste só para exibir a frase: “Lista do meu controlador”. Na raiz do seu projeto entre no diretório: controller e rode o comando a seguir para criar o controller.

cd controller/
drogon_ctl create controller ListController

A saída deve ser: create a http simple controller:ListController .

Foram criados dois arquivos: ListController.cc e ListController.h

2.1 - Editando os arquivos

Primeiramente vamos editar o arquivo: ListController.h e adicionar essas duas linhas:

PATH_ADD("/",Get,Post);
PATH_ADD("/list",Get);

O arquivo final fica desse jeito:

#pragma once
#include <drogon/HttpSimpleController.h>
using namespace drogon;
class ListController:public drogon::HttpSimpleController<ListController>{
  public:
    virtual void asyncHandleHttpRequest(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback) override;
    PATH_LIST_BEGIN
    PATH_ADD("/",Get,Post);
    PATH_ADD("/list",Get);
    PATH_LIST_END
};

E o arquivo ListController.cc deverá ficar assim:

#include "ListController.h"
void ListController::asyncHandleHttpRequest(const HttpRequestPtr& req, 
                                            std::function<void (const HttpResponsePtr &)> &&callback){
    auto resp=HttpResponse::newHttpResponse();
    resp->setStatusCode(k200OK);
    resp->setContentTypeCode(CT_TEXT_HTML);
    resp->setBody("Lista do meu controlador");
    callback(resp);
}

Recompile o projeto e acesse:

cd ../build
cmake ..
make
./meu-projeto

Agora tanto na raiz(http://localhost:8080/ via get ou post) como no endereço http://localhost:8080/list obteremos conteúdo.

Controllers Drogon C++

Se você estiver usando o Postman notará que a raiz devolverá a informação tanto para GET quanto para POST, mas o /list retornará somente para GET.

O endereço do Drogon oficial no GitHub é: https://github.com/an-tao/drogon, lá você pode obter informação de toda documentação para instalar e desenvolver seus aplicativos web.

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


Assista o vídeo


cpp desenvolvimentoweb


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!