Desenvolvi uma aplicação Web a que chamei de Web Real Time Engine, que não é nada mais do que um ponto de partida para o desenvolvimento de futuras aplicações Web que tenham como requisitos funcionarem em tempo real (Real-time web) e/ou funcionarem numa única página Web (Single-page application).

Para o desenvolvimento deste projecto não consultei qualquer informação sobre o tema "aplicações Web em tempo real", pelo que é possível que o mesmo não esteja a par do "estado da arte" em aplicações Web Real-time (entretanto já fiz algumas pesquisas). O meu objectivo era fazer a aplicação sem cair na tentação de copiar outras técnicas existentes e até eventualmente melhores para a tarefa em questão, isso ficará para uma próxima fase.

Web Real-Time Engine


No cliente

Para actualizar os conteúdos da página utilizei Ajax, que periodicamente solicita ao servidor por novo conteúdo. Esta técnica tem como inconveniente poder estar a sobrecarregar o servidor com pedidos em excesso e eventualmente desnecessários no caso de não existirem actualizações dos conteúdos. Uma alternativa ao uso de Ajax seria a utilização de WebSockets, mas como não estou muito familiarizado com esta tecnologia, optei pelo uso de Ajax. Numa próxima fase pretendo experimentar a utilização de WebSockets e explorar outras técnicas utilizadas no desenvolvimento de aplicações Web Real-time, para depois melhorar a minha aplicação onde houver melhorias a fazer.

Actualização (2013-12-10):
Em vez de Ajax a aplicação está agora a usar a tecnologia Server-Sent Events (não é suportada pelo Internet Explorer).


No servidor

A programação do lado do servidor foi feita em Python, mas isso é o que menos importa neste projecto, onde o mais importante está no lado do cliente feito em JavaScript.

Actualização (2013-12-10):
A aplicação do lado do servidor sofreu algumas adaptações para poder funcionar quer com Ajax quer com Server-Sent Events.
Os dados enviados pelo servidor utilizando Server-Sent Events devem sempre começar com a string data: e terminar com \n\n.
Ex.: data:dados a serem enviados para o cliente\n\n


Links interessantes

- Post do stackoverflow com as principais diferenças entre Ajax Polling, Ajax Long-Polling, Server-Sent Events e Websockets.
- Um excelente post sobre Python and Real-time Web do blogue Eat at Joe's.


Conclusão

Algum de vós já fez uma aplicação Web Real-time? Que técnicas é que utilizaram?



A aplicação está a funcionar no endereço http://webrealtimeengine.appspot.com e o código fonte está disponível em https://github.com/sergiofasilva/WebRealTimeEngine.

A aplicação com Ajax continua a funcionar no seguinte endereço: http://webrealtimeengine.appspot.com/ajax


Comentários e sugestões são bem-vindos.