Ver la Versión Completa : Arquitectura recomendada
ismaelv90
10/12/15, 13:18:50
Buenos días:
Soy nuevo por aquí, al igual que en el tema del desarrollo de aplicaciones Android. He estado informándome de que tipo de arquitectura seguir para la aplicación que quiero crear, pero prefiero que vosotros me deis vuestra opinión, que seguro tenéis más experiencia.
La idea era crear un modelo cliente-servidor, donde en el servidor tenga una base de datos, y una aplicación para poder controlar dicha base de datos y poder programar tareas. Cuando estas tareas programadas lleguen a su momento de ejecutarse, se deberá enviar una notificación a todos los clientes (app del smartphone), así como que ellos tengan los datos de la BBDD del servidor actualizada. También me gustaría que desde el cliente se pueda enviar un mensaje al servidor, que deberá actualizar también la BBDD.
Después de estar informándome, mi idea era crear la BBDD en MySQL y la aplicación servidor en Java, ya que en este lenguaje sí tengo más experiencia. Mi duda llega a la hora de la comunicación entre servidor y clientes, no sé si me recomendáis utilizar Web Services, sockets u otra tecnología más apropiada. No va a haber demasiado envío de mensajes entre servidor y clientes, pero sí es necesario 3 requisitos:
-El servidor debe enviar notificaciones masivas a ciertos clientes (estén o no conectados).
-No hay comunicación entre clientes.
-Los clientes cada vez que inician la aplicación deben actualizar los datos con los nuevos valores de la BBDD (son pocos datos, no creo que consuma demasiado).
Basicamente ese es el resumen, cualquier sugerencia será bienvenida.
¡Muchas gracias a todos!
c2alvaro
10/12/15, 15:59:40
Saludos, lo mas simple es WebService ahora si tienes las posibilidades de hacerlo por sockets tambien es posible eso dependera de lo complejo de tu app pero creo que lo mas simple es WebService, ahora para el envio de notificaciones desde el servidor a los moviles hay varias formas de hacerlo pero ahora esta de moda CloudMessagind de Google segun los mas expertos es la mejor forma de enviar notificaciones, espero te sirva de algo
ismaelv90
10/12/15, 17:10:53
Muchas gracias por la respuesta.
Me surgen varias preguntillas, a ver si entre todos me podéis ir aclarando un poco... ya que hay tanta información en internet y tantas formas de hacer las cosas, que a veces es complicado elegir.
-¿Me recomendáis el uso de una aplicación Java para el servidor? ¿Esta aplicación debe estar alojada en el servidor (que no sé como integrarla? o mejor utilizarla desde mi ordenador con una conexión a la BBDD en el servidor? Además también me preocupa la seguridad del acceso.
-En cuanto a la arquitectura, según lo que me has recomendado, casi que me decanto por un Web Service, pero, ¿qué lenguaje me recomendáis, también Java?
-También he leído que es recomendable usar 3 capas (Cliente - Servidor(PHP) - BBDD). ¿Esto es compatible con el Web Service hecho en Java?
Como veis, tengo un poco cacao de tecnologías jaja...
¡Gracias nuevamente!
kriogeN
10/12/15, 17:40:07
Muchas gracias por la respuesta.
Me surgen varias preguntillas, a ver si entre todos me podéis ir aclarando un poco... ya que hay tanta información en internet y tantas formas de hacer las cosas, que a veces es complicado elegir.
-¿Me recomendáis el uso de una aplicación Java para el servidor? ¿Esta aplicación debe estar alojada en el servidor (que no sé como integrarla? o mejor utilizarla desde mi ordenador con una conexión a la BBDD en el servidor? Además también me preocupa la seguridad del acceso.
Si usas una aplicación debes comunicarte con ella mediante Sockets (salvo que la propia aplicación sea un servidor HTTP, pero nunca tendrá la potencia de un verdadero servidor HTTP).
-En cuanto a la arquitectura, según lo que me has recomendado, casi que me decanto por un Web Service, pero, ¿qué lenguaje me recomendáis, también Java?
Si preguntas eso es que nunca has trabajado con un Servlet ni sabrás lo que es JSP.
Para programar un WebService lo mínimo es conocer PHP, ASP o JSP. Siendo el más simple de todos a la hora de implantarlo el PHP. Yo lo hago todo con ASP, pero eso va en gustos.
-También he leído que es recomendable usar 3 capas (Cliente - Servidor(PHP) - BBDD). ¿Esto es compatible con el Web Service hecho en Java?
El Servidor y la BBDD puede ser de lo que te de la gana, es más, la idea que si hoy usas PHP y MySQL y mañana lo cambias por ASP y MSSQL, el cliente (en este caso el móvil) ni se entere.
Pero si quieres programar el WebService en Java tiene que ser mediante Servlets en JSP, y por tanto el servidor debe ser de JSP, Tomcat por ejemplo, no se si existe algún otro, yo sólo conozco ese.
Y en cuanto a la comunicación entre el servidor y el móvil, debe ser mediante Google Cloud Messaging. Decía c2alvaro que es el que está de moda, no es que esté de moda, es que es el único válido para hacerlo, sobre todo si quieres que tu app funcione en Marshmallow. De hecho los servicios Push externos existentes para Android, como Parse por ejemplo, lo que hacen es usar GCM por debajo, ya que es la única forma de hacer llegar una Push a un móvil Android y que verdaderamente sea Push.
ismaelv90
10/12/15, 20:05:43
Jeje es curioso como cada duda que me resolveis... hace que me surjan otras mil... pero tengo la esperanza de que otros que están en mi situación también les sirva...
El tema es que una vez ya creé un WebService en JSP, no me resultó demasiado complicado la verdad, pero lo hice en local y muy sencillito, además Netbeans te creaba prácticamente todo. Sin embargo, una vez cree el Web Service... ¿qué tecnología necesitaría que tuviese el servidor para poder ejecutarlo? Quiero decir... en local es muy sencillo, pero una vez lo quiera montar en un dominio púbico... ¿necesitaría que tuviese un contenedor de Servlets?
En resumen de todo lo que me habéis contado... que no sé si lo he comprendido todo es:
SERVIDOR (en un dominio que contrataré)
Compuesto por la BBDD en MySQL.
El contenedor de servlets (como Tomcat) para almacenar el WebService escrito en JSP.
La aplicación que conecto con el servidor a través de sockets escrita en Java.
CLIENTE
La aplicación móvil que se conecta al WebService para la información y mediante Google Cloud Messaging para las notificaciones.
¿Es algo así lo que me decís o alguna cosa no la he entendido bien? ¡Gracias!
kriogeN
10/12/15, 21:39:56
Yo lo que no entiendo es porque tienes una aplicación en Java con comunicación en Sockets y luego otra en JSP para comunicación en HTTP. Cuando lo puedes tener todo en JSP (ya que todo es Java) y hacerlo todo mediante HTTP.
Tener una aplicación independiente del HTTP sólo se justifica cuando necesitas un motor muy potente que esté continuamente realizando cálculos. Hay mucha gente que programa en PHP que luego necesita de una aplicación externa en C que está realizando cálculos continuamente, pero realmente la comunicación se realiza mediante la BD (la aplicación externa escribe sobre la BD y el PHP lee de ahí).
Esto en ASP y en JSP no es necesario, ya que se apoyan sobre el motor .NET o el motor Java respectivamente de la máquina donde se ejecutan, y pueden tener aplicaciones corriendo continuamente dentro de la propia instancia.
Por ejemplo yo en ASP tengo aplicaciones donde tengo hilos que procesan notificaciones Push a enviar, y cuando tengo que enviar notificaciones Push después de que ocurra algo no lo hago directamente, sino que inserto en la BD todas las Push que se tienen que enviar y el otro hilo al leerlo comienza a enviarlas una a una.
ismaelv90
10/12/15, 23:18:56
El tema de tener una aplicación Java era que estaba reutilizando una que ya tenía hecha de hace tiempo con interfaz gráfica creada, pero no entiendo si me recomiendas migrarla a JSP, o realizar la interfaz en otro lenguaje.
Por así decirlo, lo único que ahora mismo tengo es la aplicación Java conectada mediante JDBC a una BBDD MySQL (funcionando perfectamente, me crea los hilos, me almaceno la info de las notificaciones en la BBDD etc...), el resto está por implementar, ya que está hecho a nivel de aplicación de escritorio.
Según lo que me dices, me lo llevo todo a JSP, pero como ésta interfaz la van a taner que llevar otras personas que deberán utilizarla, no sé si el JSP me lo tengo que llevar al servidor, o permanecerá en local con conexiones al servidor (no sé si me explico).
Otra duda que me surge es si seguir utilizando JDBC para realizar las conexiones a la BBDD o hay métodos más seguros.
Hasta el momento veo más complicado montar bien el servidor, que luego hacer la parte cliente (que ya llegarán las dificultades, no lo dudo).
Gracias!
mocelet
12/12/15, 14:00:56
JDBC es un API estándar de Java para acceder a bases de datos. La seguridad tiene muchos más ámbitos, desde filtrar por IP, establecer conexiones SSL, no almacenar datos críticos en claro, etc.
El API también aporta su granito de arena, usando correctamente las API de modo que las querys no las construyas tú sino el API que se encarga de validar que los datos están saneados.
Sobre la app de escritorio, si ya tienes un protocolo basado en sockets puedes reutilizarlo, pero planteate migrarlo algún día y usar una interfaz REST (HTTP + JSON o similar) que te valdrá para clientes móviles, web (javascript, GWT, etc) y de escritorio. A no ser que la app de escritorio sea de administración y la de los usuarios sea distinta en cuyo caso tampoco tiene sentido unificarlas pues su funcionalidad es distinta.
Lo que tienes que distinguir es el "frontend" o interfaz de usuario y el "backend" que es la lógica de negocio.
ismaelv90
14/12/15, 11:44:18
Hola:
Bueno.... tras releer mucho todos los consejos que me habéis dado para montar esta aplicación, he llegado a entender un poco cómo funciona todo, pero ahora tengo un dilema en el que una vez más necesito de vuestra experiencia:
Estoy entre 2 opciones para montar el servidor:
Utilizar PHP:
Ventajas: muy fácil llevármelo a un alojamiento público ya que casi todos los hosting llevan incluido PHP.
Desventajas: no sé si se puede hacer programación de hilos, ya que ahora lo tengo así montado con Java. Además, tengo todo montado en Java y tendría que adecuar el código.
Utilizar JSP
Ventajas: realmente es Java, y podría reutilizar gran parte del código.
Desventajas: nunca en mi vida he desplegado una aplicación web en JSP, no sé la viabilidad de los hosting compartidos para aceptar esto, y no sé si es requisito tener montado un servidor JSP como Tomcat.
Os pido perdón por mi desconocimiento sobre este tema... creo que una vez tenga montado el servidor, que realmente de momento sólo necesito un pequño administrador gráfico para controlar la BBDD (insert, select, update y delete básicos), ya me centraré en la parte de comunicación cliente-servidor, y me meteré en el mundo de los Servicios Web, sockets etc...
¡Gracias!
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.