Diretrizes de arquitetura para um "aplicativo da web de página única"

12

Vou iniciar um projeto paralelo para criar um aplicativo Web de "única página". O aplicativo precisa ser em tempo real, enviando atualizações aos clientes à medida que as mudanças acontecem.

Existem bons recursos para abordagens de práticas recomendadas na arquitetura para esses tipos de aplicativos. O melhor recurso que encontrei até agora é o artigo da arquitetura do trello aqui: http://blog.fogcreek.com/the-trello-tech-stack/

Para mim, essa arquitetura, apesar de muito sexy, provavelmente foi projetada em excesso para minhas necessidades específicas - embora eu tenha requisitos semelhantes. Eu estou querendo saber se eu preciso me preocupar com um sub / pub no lado do servidor, eu não poderia simplesmente enviar atualizações do servidor quando algo acontecer (por exemplo, quando o cliente envia uma atualização para o servidor, escreve a atualização no db, e, em seguida, envie uma atualização para os clientes).

Em termos de tecnologia, provavelmente estou procurando criar isso no Node.JS ou talvez Ruby, embora as diretrizes de arquitetura devam se aplicar, em certa medida, a qualquer tecnologia de servidor subjacente.

Matt Roberts
fonte

Respostas:

5

Eu definitivamente olharia para o MVC do lado do cliente, como o Backbone.js. É muito leve, mas dará à sua aplicação uma estrutura muito necessária. Eu recomendo o screencast do Peepcode como a maneira mais rápida de aprender mais sobre o Backbone.

Um bom benefício arquitetônico do MVC do lado do cliente como esse é o fato de que você pode avançar com mais facilidade na troca de dados com o lado do servidor, por exemplo, JSON estruturado sobre REST.

O Backbone.js suporta isso imediatamente - você pode serializar seus modelos entre o cliente e o servidor como JSON, o que pode nos libertar de pensar em termos de solicitação / resposta.

Algo como o Node.js, no lado do servidor, atrai esse modelo, onde você possivelmente terá muitas solicitações potencialmente assíncronas de curta duração para enviar e receber dados.

Uma alternativa .... Um modelo como o Comet pode ser uma maneira simples de obter um pub / sub da web e existem algumas estruturas do lado do servidor que suportam isso.

Benjamin Wootton
fonte
Saúde, eu definitivamente estava pensando em usar um MV * FW para o lado do cliente e aprendi sobre o Backbone. Boas dicas.
26512 Matt
1

Eu provavelmente iria com uma estrutura MV * javascript para o front end. Eu mesmo estou criando um aplicativo Web de página única e, depois de investigar várias soluções, acabei usando o Backbone.js. Descobri que, embora essa solução não fornecesse o máximo de funcionalidade pronta para uso, ela me forneceu uma base essencial e é muito mais flexível do que outras soluções que eu olhei (o que era importante para mim).

Outras soluções populares são o Ember.js e o Knockout.js, que fornecem mais funcionalidades prontas para uso, no entanto, é necessário seguir as convenções para usar a funcionalidade ThT (que pode ou não funcionar para você).

ryanzec
fonte
1

Este é um IMO acéfalo. AngularJS para o front end, porque é incrível. NodeJS / express / SocketIO para um back-end dinâmico e sexy com qualidade de pub / sub e um mínimo de barulho. E como bônus, você pode usar um idioma para a frente e para trás!

Confira minha implementação do mesmo https://github.com/hackify/hackify-server para um exemplo

Uma ressalva, algumas pessoas estão recomendando uma alternativa do NodeJS ao socketio chamada sockjs, mas eu não verifiquei isso, então não posso recomendá-lo

Michael Dausmann
fonte
0

Parece que você está vendo o Apache 2.2 com servidor de aplicativos PHP ou Tomcat com um servlet simples que lida com solicitações. É o equivalente do carpinteiro a martelos e pregos. Nada complicado, mas faz o trabalho. Se você precisar expandir a funcionalidade, poderá fazê-lo, pois o Tomcat pode oferecer suporte a jsp e jsf, se necessário.

No que diz respeito ao front-end, eu me sentiria confortável usando simplesmente o jQuery ( $ .post , $ .load , $ .ajax ), pois é bastante útil a duplicação como forma de adicionar funcionalidade à sua página em combinação com a interface do usuário do jQuery

Neil
fonte
0

Se você quiser atualizações de clientes em tempo real, será necessário implementar as chamadas "AJAX" de bloqueio longo ou, de preferência, usar os websockets modernos. Isso permite que você envie atualizações para um cliente conectado, que será tratado por um pouco de javascript.

Entendo que o estado da arte atual (ou a última moda) é o AngularJS do Google. É parcialmente projetado para facilitar a escrita de SPAs.

gbjbaanb
fonte
0

Se você quiser algo próximo à pilha média (node.js, mongo ...) para criar um aplicativo de página única que precise ser reativo, eu escolheria meteoros . Especialmente se você estiver construindo um protótipo e começando do zero.

Rails com um front-end angular seria uma boa opção, mas você terá mais dificuldade em "enviar atualizações para os clientes à medida que as mudanças acontecerem", pois você precisará instalar gemas específicas, juntar algumas bibliotecas de sondagem longa ou sockjs. .

Benjamin Crouzier
fonte