Aplicativos web em C++ usando o Tufão

Quando eu comento sobre desenvolvimento web em C++ a alguns programadores, eles demonstram uma falta de fé perceptível na ideia, enquanto outros ficam curiosos e começam a discutir como as peculiaridades da linguagem afetam o seu uso na área. Inspirado pela framework Node.js, desenvolvi o Tufão.

[ Hits: 26.111 ]

Por: Vinícius dos Santos Oliveira em 12/06/2012 | Blog: https://vinipsmaker.github.io/


Introdução



Tufão é o projeto que criei, com o objetivo inicial de ser um port do Node.js para C++. Para aqueles que não sabem, Node.js é uma API assíncrona para desenvolver servidores web em JavaScript. Uma das coisas legais sobre o design da API é que mesmo usando uma abstração na qual você escreve pouco código, é possível tirar proveito da propriedades de baixo nível do HTTP. Esse design despertou minha atenção.

Para suportar a API assíncrona do Node.js, desenvolvi o projeto em cima do Qt. Dessa forma reutilizo um sistema de loops orientado a eventos (necessário para suportar a característica assíncrona do Node.js) com suporte a uma abstração de alto nível (Signals & Slots) e tenho acesso a implementações comuns para várias plataformas (como geração de UUIDs, por exemplo).

Como disse anteriormente, o objetivo inicial do projeto era ser um port do Node.js, mas esse não é o único objetivo e o Tufão agrega muitas outras facilidades que não estão presentes na API "núcleo"/"padrão" do Node.js, como suporte a WebSocket e um roteador de requisições.

Antes de começar a explodir sua mente com informações, você precisa das ferramentas instaladas e configuradas corretamente no seu sistema, o primeiro passo. Existem vários "primeiro passo", e o que você vai utilizar depende da sua plataforma. Então apenas pule as seções que não lhe interessam.

Independente de qual seja a sua plataforma, ao menos acesse a página do projeto:
Onde você pode encontrar downloads, código-fonte e outras informações.

Instalação no ArchLinux

Há um pacote disponível no AUR, então a instalação é bem fácil. Caso você tenha o yaourt instalado, por exemplo, só precisa executar o seguinte comando para instalar o Tufão, a documentação do Tufão, e o plugin para QtCreator:

# yaourt -S tufao tufao-doc tufao-plugin

NOTA: A instalação do tufao-plugin é um processo lento, pois o download e a compilação do QtCreator é necessária.

Instalação no Windows, versão MSVC2010

Com o Qt (versão MSVC) instalado, baixe e execute o arquivo.

Instalação genérica (compilando)

Caso não haja um build para sua plataforma, você terá que se contentar com o modo de instalação mais amplo. Você precisa saber como utilizar a ferramenta qmake para seguir as instruções. Para começar, baixe e extraia o código-fonte do Tufão:
Os comandos para instalar o Tufão são, normalmente:

# qmake
# make install


Os comandos abaixo habilitam que você compile projetos em modo debug:

# qmake CONFIG=debug
# make install


Agora a biblioteca Tufão está instalada, mas para tirar maior proveito, além da biblioteca, você deveria instalar as ferramentas que se encontram na pasta tools. Dentro dessa pasta você encontrará um editor de rotas para o servidor de plugins do Tufão e um plugin para o QtCreator. O editor de rotas é um projeto comum baseado em qmake, que não é difícil de instalar:

# qmake
# make install
Já o plugin para QtCreator exige alguns passos adicionais. Primeiro, baixe o código-fonte do QtCreator 2.5. Você precisará extraí-lo em alguma pasta e então compilá-lo. Você deverá exportar a pasta que contém o código-fonte na variável de ambiente QTC_SOURCE e a pasta que contém o build na variável QTC_BUILD. Após isso, execute os tradicionais passos:

# qmake
# make install


O plugin será instalado na pasta "${QTC_BUILD}/lib/qtcreator/plugins/TufaoTeam".
    Próxima página

Páginas do artigo
   1. Introdução
   2. Um pouco sobre HTTP
   3. Arquitetura do Tufão
   4. WebSocket
   5. Criando uma aplicação de chat
Outros artigos deste autor

VLC Media Player (parte 2)

GNU Emacs, o primeiro GNU

VLC Media Player

Tratamento de exceções na linguagem C

Mupen64plus, o melhor emulador de Nintendo 64 disponível para GNU/Linux

Leitura recomendada

Biblioteca VBMcgi: Crie aplicações Web CGI em C++ com acesso ao banco Interbase/Firebird sem mistério

DotGNU: a resposta Open Source ao dotNET

Criando aplicações RESTful com Qt e Cutelyst

A duplicação do buffer de saída na chamada de sistema fork() do Linux

Utilizando técnicas recursivas em C e C++

  
Comentários
[1] Comentário enviado por bolche em 12/06/2012 - 14:23h

Legal, tava querendo brincar de aplicativos web em C++ faz um tempo.
Você podia aproveitar a infraestrutura de outro servidor web ao invés de fazer tudo do zero, por exemplo o apache, modificar o processo de construção para construir um módulo do apache ao invés de um servidor standalone. Talvez um protocolo mais agnóstico como FastCGI seja ainda melhor.
De qualquer maneira, muito legal!

[2] Comentário enviado por vinipsmaker em 12/06/2012 - 15:59h


[1] Comentário enviado por bolche em 12/06/2012 - 14:23h:

Legal, tava querendo brincar de aplicativos web em C++ faz um tempo.
Você podia aproveitar a infraestrutura de outro servidor web ao invés de fazer tudo do zero, por exemplo o apache, modificar o processo de construção para construir um módulo do apache ao invés de um servidor standalone. Talvez um protocolo mais agnóstico como FastCGI seja ainda melhor.
De qualquer maneira, muito legal!


Não criei tudo do 0, utilizo o parser HTTP criado durante o projeto Node.js.

E já pensei sobre o uso de FastCGI, mas queria diminuir o gargalo para aumentar o desempenho e fazer um servidor standalone é uma das estratégias. Isso, só ressaltando, traz outras implicações, mas é fácil contornar essa decisão usando, no Apache mesmo, proxy reverso ( http://httpd.apache.org/docs/2.0/mod/mod_proxy.html ).

[3] Comentário enviado por julio_hoffimann em 12/06/2012 - 19:45h

Parabéns pelo projeto Vinícius!

Abraço!

[4] Comentário enviado por fabio em 12/06/2012 - 20:00h

Muito bom mesmo. Como é o desempenho de sites em C++ se comparados com linguagens interpretadas, tal como o PHP? Vale a pena?

[5] Comentário enviado por julio_hoffimann em 12/06/2012 - 20:13h

Estava tentando lembrar o nome de um projeto recente da Google para aplicações web em código nativo: http://www.youtube.com/watch?v=UUnC5y4j0As

A idéia é poder rodar aplicações C/C++ ou outras linguagem de alta performance no navegador de forma segura, talvez seja de interesse do autor. ;-)

Abraço!

[6] Comentário enviado por vinipsmaker em 12/06/2012 - 22:24h


[5] Comentário enviado por julio_hoffimann em 12/06/2012 - 20:13h:

Estava tentando lembrar o nome de um projeto recente da Google para aplicações web em código nativo: http://www.youtube.com/watch?v=UUnC5y4j0As

A idéia é poder rodar aplicações C/C++ ou outras linguagem de alta performance no navegador de forma segura, talvez seja de interesse do autor. ;-)

Abraço!


http://en.wikipedia.org/wiki/Google_Native_Client ? Já conhecia.
:P

[7] Comentário enviado por vinipsmaker em 13/06/2012 - 09:09h


[4] Comentário enviado por fabio em 12/06/2012 - 20:00h:

Muito bom mesmo. Como é o desempenho de sites em C++ se comparados com linguagens interpretadas, tal como o PHP? Vale a pena?


Tem um texto onde eu discuti bastante sobre a escolha da linguagem para o Tufão:
http://vinipsmaker.wordpress.com/2012/05/07/understanding-tufao-part-1/

Mas, para discutir sobre desempenho, eu preciso fazer benchmarks, para não caminhar muito na direção do "achismo". Fico devendo um benchmark.

[8] Comentário enviado por pregador em 18/07/2021 - 07:38h


Vamos nos arrepender do mal e fazer o bem. Vamos se arrepender e e se
achegar a Deus dando frutos de arrependimento, como está escrito:

Produzi, pois, frutos dignos de arrependimento;
Mateus 3:8

Quem não aceitou o Senhor Jesus ainda, ore assim

Senhor Deus, eu venho a Ti, como pecador que sou, em nome
de Jesus pedir-te perdão pelos meus pecados. Perdoe Senhor,
meus pecados.

Ajude-me a melhorar, sozinho eu não consigo.

Livra-me de todo o mal, pois quero andar na sua presença
buscando fazer o bem.

Faz nova todas as coisas na minha vida que não Te agradam

Eu peço que entre em minha vida para eu ter a vida eterna
que vem após essa vida que o Senhor me concedeu. e ter a
salvação para não sofrer eternamente.

Amém ao Deus que me fez e me ama.

Nós amamos a Deus porque ele nos amou primeiro. 1 João 4:19.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts