entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Actualizar tabla en tiempo Real

Buenas compañeros, tengo una duda...

Que se utiliza para actualizar en tiempo real una tabla,, por ejemplo:

1, tengo una aplicación móvil que hace Inserts a una base de datos

  1. una aplicación web para monitorear esas tablas

cuando la aplicación móvil haga el insert la vista web debe actualizarse sin refrescar la pantalla, y sin Ajax..

La web esta hecha en MYSQL, PHP, la aplicación movil en Android,el front end de la web es boostrap...
eh estado leyendo sobre nodeJS, socketIO,sockets php,, etc, pero no logro comprender bien cual es la mejor opcion para mi y un ejemplo practico de lo que quiero

espero me puedan orientar, Saludos a todos

2 Respuestas

2votos

carlossevi Puntos61050

La única solución que se me ocurre para que tu página web intercambie datos con el servidor bajo demanda del servidor (una recarga estándar o una actualización vía ajax serían demandadas por el lado del cliente) es mediante WebSockets.

Copio algunas definiciones de Wikipedia:

Socket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera fiable y ordenada.

WebSocket es una tecnología diseñada para implementar Sockets en navegadores y servidores web, pero puede utilizarse por cualquier aplicación cliente/servidor. La API de WebSocket está siendo normalizada por el W3C.

Aclarando los términos, WebSockets es un protocolo de comunicación, una tecnología. Socket.IO es una biblioteca para implementar este tipo de comunicación que consta de dos partes: bibloteca de JS que se ejecuta en el navegador del lado del cliente y una biblioteca de Node.js que se ejecuta en el lado del servidor. Node.js es básicamente un entorno de programación que te permitirá tener un motor de Javascript para el servidor, pero en este caso "sólo" lo usarías para que pueda ejecutarse Socket.IO.

Como puedes ver, los términos que propones no son equivalentes ni excluyentes, todos están relacionados.

Si quieres iniciarte, yo empezaría por seguir los ejemplos propuestos en la propia página de Socket.IO: http://socket.io/get-started/.

Leonardo-Tadei comentado Jul 22, 2014

Tal y como dice @carlossevi, tendrías que usar alguna tecnología push para que sea el servidor el que le envíe el mensaje al cliente de que se refresque.

Desde al lado del cliente se puede hacer lo mismo y funciona igual con AJAX, pero decís que no podés usarlo... sin embargo es más factible que un navegador soporte AJAX que sooprte WebSocket... lo más probable es que tengas que escribir una versión para cada tipo de nevegador, y dependiendo de esto, enviar la página web correcta en respuesta desde el servidor.

Los websocket no son algo mágico: tendrás que tener un proceso corriendo permanentemenet en el servidor para que, al detectar el cambio en la DB, emita la llamada a todos los clientes.

Una vez que el WebSocket le devualva al servidor los nuevos datos (o mejor aun, el mensaje de que hay nuevos datos) será el cliente quien tenga que mostrarlos o traerlos, con lo que el funcionamiento del redibujado de la página es idéntico a hacerlo con AJAX o recargando. WebSocket o AJAX definen quién inicia la conexión: todo lo demás, procesamiento, recarga/redibujado sigue siendo necesario.

Saludos!

Novus Ordo Seclorum comentado Jul 22, 2014

Pero estar refrescando la pagina con Ajax cada 5 segundos o cada determinado tiempo, no hace "Lenta" e ineficiente la pagina ?, es solo una pregunta.. ya que no se que implique estar refrescando varias partes de la pantalla cada determinado tiempo...

Saludos..

Leonardo-Tadei comentado Jul 22, 2014

Hola Novo,

refrescar la página cada 5 segundos, además de que sea innecesario y que opr ejemplo 10 o 15 basten, hará lenta la página si la refrescás completa, pero justamente con AJAX o con WebSocket, lo que podés ahcer es refrescar solamente las diferencias, de forma tal de que los mensajes sean más cortos, y para el caso en que no haya ninguna novedad, no devolver nada.

Suponé que querés mostrar nuevas ventas que los usuarios móviles van haciendo. Podés pedir desde el cliente "dame las ventas" y enviar la última página (porque paginarás los datos, supongo), o podés poner un poco de inteligencia en la pregunta, y decir, "dame nuevas ventas, 187", con lo que el servidor devolverá las nuevas ventas a partir de la 187, que es la última recibida.

Si no hay nada nuevo, devuelve vacío, y si hay 3 ventas, devuleve solo las 188, 189 y 190, con lo que el refresco es de 3 datos solamente.

En el caso del WebSocket, hay menos peticiones, pero tenés que considerar el costo de mantener la conexión abierta, que no es poco. Requiere mucho más server en este escenario el WebSocket que AJAX ... y an ambos casos, alguien tiene que redibujar la parte de la página correspondiente.

Saludos!

PD: ya me está dando ganas de poner mi comentario a Carlos como respuesta ;-)

carlossevi comentado Jul 22, 2014

Veo muy lógico que pongas tu comentario como nueva respuesta. Yo he ido por el camino de aclarar los conceptos mezclados de WebSockets, Node.js, Socket.IO... porque he interpretado que había descartado otras opción con motivos de peso y me he limitado a responder a la pregunta. Tu en cambio estás planteando alternativas, que además me parecen más lógicas y racionales.

Yo en tu caso Novus también optaría por una llamada AJAX periódica que sólo traiga los últimos cambios pasándo como parámetro el último dato que se tiene en el cliente.

Leonardo-Tadei comentado Jul 23, 2014

Hola Carlos,

no pasa nada! El comentario era más bien para motivar a nuestro Nuevo Orden del Mundo a que planteo una nueva pregunta menos general y con más detalles de su problema en concreto.

Seguimos!

Novus Ordo Seclorum comentado Jul 23, 2014

Todas las respuestas me ayudaron...Implemente nodeJS pero analizando un poco, creo que no es al menos la solución mas factible que tengo por ahora, ya que necesitare de un servidor especial por que el que rento no me deja abrir puertos... Así que usare ajax...

Muchas gracias por sus consejos.... Saludos desde mexico

0voto

roel_magdaleno Puntos360

Recién hice algo parecido pero en puro Web, la solución más cercana es utilizar una función AJAX que se comunique con el servidor, y agregarle a esa función un tiempo de intervalo de ejecución, por ejemplo, que a cada 5 segundos se ejecute la función AJAX que has creado.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta