Pular para o conteúdo

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.
Vinícius dos Santos Oliveira vinipsmaker
Hits: 27.924 Categoria: C/C++ Subcategoria: Internet
  • Indicar
  • Impressora
  • Denunciar

Parte 4: 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.

   1. Introdução
   2. Um pouco sobre HTTP
   3. Arquitetura do Tufão
   4. WebSocket
   5. Criando uma aplicação de chat

A história do ogg na web

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

Próximas Tecnologias do Sistema GNU/Linux

GNU Emacs, o primeiro GNU

A história do hardware

DotGNU: a resposta Open Source ao dotNET

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

Criando aplicações RESTful com Qt e Cutelyst

Ensaio acerca de bibliotecas de código aberto para abstração de acesso a banco de dados em linguagem C++

Introdução à ponteiros em C

#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

Entre na sua conta para comentar.