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.108 ]

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


WebSocket



Uma limitação do protocolo HTTP, já exposta anteriormente, é que não é possível enviar informações ao cliente, inviabilizando um sistema de notificação de eventos. Para contornar tal limitação, existem várias técnicas, detalhadas na Wikipédia. Cada uma dessas técnicas possuem, por não ser algo natural para o qual o protocolo foi projeto, limitações.

A solução definitiva para o problema foi batizada de WebSocket e é composta de duas partes, um protocolo e uma API JavaScript. O protocolo foi finalizado em dezembro do ano passado e já é suportado pelo Tufão desde a versão 0.2. A API ainda está sendo padronizada.

O HTTP permite que uma conexão seja atualizada para outro protocolo e é essa característica que o WebSocket usa para funcionar, fornecendo um canal de comunicação bidirecional.

Para usar WebSockets no Tufão, você precisa criar uma classe que herde de HttpServer e sobrescrever o método upgrade. O código abaixo mostra como fazê-lo:

void WebServer::upgrade(Tufao::HttpServerRequest *request,
                        const QByteArray &head)
{
    Tufao::WebSocket *socket = new Tufao::WebSocket(this);
    socket->startServerHandshake(request, head);
    socket->setMessagesType(Tufao::WebSocket::TEXT_MESSAGE);

    connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));

    connect(socket, SIGNAL(newMessage(QByteArray)),
            /* ... */, /* ... */);
}

Para usar esse protocolo nas suas páginas web, você precisará também da API JavaScript. Uma boa referência para o mesmo pode ser encontrada no site da Mozilla. É importante lembrar que a API está em desenvolvimento e pode mudar até o lançamento de sua versão final.

Página anterior     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

Tratamento de exceções na linguagem C

Entendendo os codecs, os containers formats e por que o Ogg é tão bom

A história do ogg na web

Leitura recomendada

DotGNU: a resposta Open Source ao dotNET

Criando aplicações RESTful com Qt e Cutelyst

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

Criando aplicativos para o iPhone no Linux (sem Xcode e MacOS X)

Introdução à linguagem C - Parte IV

  
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