Pautas de arquitectura para una "aplicación web de una sola página"

12

Voy a comenzar un proyecto paralelo para construir una aplicación web de "página única". La aplicación debe estar en tiempo real, enviando actualizaciones a los clientes a medida que ocurren los cambios.

¿Existen buenos recursos para los enfoques de mejores prácticas para la arquitectura de este tipo de aplicaciones? El mejor recurso que he encontrado hasta ahora es el artículo de arquitectura de trello aquí: http://blog.fogcreek.com/the-trello-tech-stack/

Para mí, esta arquitectura, aunque es muy sexy, probablemente esté sobre diseñada para mis necesidades específicas, aunque tengo requisitos similares. Me pregunto si necesito molestarme con un sub / pub en el lado del servidor, ¿no podría simplemente enviar actualizaciones del servidor cuando sucede algo (por ejemplo, cuando el cliente envía una actualización al servidor, escribe la actualización en el db, y luego enviar una actualización a los clientes).

En cuanto a la tecnología, probablemente esté tratando de construir esto en Node.JS o tal vez Ruby, aunque las pautas de arquitectura deberían aplicarse en cierta medida a cualquier tecnología de servidor subyacente.

Matt Roberts
fuente

Respuestas:

5

Definitivamente miraría hacia MVC del lado del cliente para esto, como Backbone.js. Es muy liviano pero le dará a su aplicación una estructura muy necesaria. Recomiendo encarecidamente el screencast de Peepcode como la forma más rápida de aprender más sobre Backbone.

Un buen beneficio arquitectónico del MVC del lado del cliente como este es el hecho de que puede moverse más fácilmente hacia el intercambio de datos con el lado del servidor, por ejemplo, JSON estructurado sobre REST.

Backbone.js lo admite de forma inmediata: puede serializar sus modelos entre el cliente y el servidor como JSON, lo que puede liberarnos de pensar en términos de solicitud / respuesta.

Algo así como Node.js en el lado del servidor atrae bajo este modelo, donde posiblemente tendrá muchas solicitudes potencialmente asíncronas de corta duración para enviar y extraer datos.

Una alternativa ... Un modelo como Comet puede ser una forma simple de lograr pub / sub web y hay algunos marcos del lado del servidor que lo admiten.

Benjamin Wootton
fuente
Saludos, definitivamente estaba pensando en usar un MV * FW para el lado del cliente, y he estado aprendiendo sobre Backbone. Buenos consejos.
Matt Roberts
1

Probablemente iría con un framework MV * javascript para el front-end. Yo mismo estoy creando una aplicación web de una sola página y después de investigar una serie de soluciones, terminé con Backbone.js. Descubrí que si bien esta solución no proporcionaba la mayor funcionalidad inmediata, sí me proporcionó una base básica para comenzar y es mucho más flexible que otras soluciones que miré (lo que era importante para mí).

Otras soluciones populares son Ember.js y Knockout.js, que proporcionan más funciones listas para usar; sin embargo, debe seguir sus convenciones para utilizar la funcionalidad de THT (que puede o no funcionar para usted).

ryanzec
fuente
1

Esta es una obviedad IMO. AngularJS para el front end porque es increíble. NodeJS / express / SocketIO para un backend dinámico y sexy con bondad de pub / sub y un mínimo de alboroto. ¡Y como beneficio adicional, puede usar un idioma para el frente y la parte posterior!

Vea mi implementación del mismo https://github.com/hackify/hackify-server para ver un ejemplo

Una advertencia, algunas personas recomiendan una alternativa NodeJS a socketio llamada sockjs, pero no lo he comprobado, así que no puedo recomendarlo

Michael Dausmann
fuente
0

Parece que lo que está viendo es Apache 2.2 con servidor de aplicaciones PHP o Tomcat con un servlet simple que maneja las solicitudes. Es el equivalente del carpintero de martillo y clavos. Nada complicado pero hace el trabajo. Si alguna vez necesitara ampliar la funcionalidad, siempre podría hacerlo, ya que Tomcat puede admitir jsp y jsf si alguna vez lo necesitara.

Para lo que concierne al front end, me sentiría cómodo simplemente usando jQuery ( $ .post , $ .load , $ .ajax ) ya que es bastante útil duplicarlo como un medio para agregar funcionalidad a su página en combinación con jQuery UI

Neil
fuente
0

Si desea actualizaciones de clientes en tiempo real, deberá implementar las llamadas "AJAX" de bloqueo prolongado o, preferiblemente, utilizar los sockets web modernos. Estos le permiten enviar actualizaciones a un cliente conectado que será manejado por un poco de javascript.

Entiendo que el estado actual de la técnica (o la última moda) es AngularJS de Google. Está diseñado en parte para facilitar la escritura de SPA.

gbjbaanb
fuente
0

Si desea algo cercano a la pila media (node.js, mongo ...) para construir una aplicación de una sola página que necesita ser reactiva, elegiría meteorito . Especialmente si está construyendo un prototipo y comenzando desde cero.

Los rieles con una interfaz angular serían una buena opción en mi humilde opinión, pero será más difícil "enviar actualizaciones a los clientes a medida que se produzcan los cambios", ya que necesitaría instalar gemas específicas, unir algunas bibliotecas de sondeo largo o sockjs. .

Benjamin Crouzier
fuente