¿Cómo hacer una Web que se actualice en tiempo real? (PHP)

4 positivos 0 negativos
2,035 visitas
preguntado por carlos052 --Nuevo-- (538 puntos) Jun 14, 2016 en Programación
Me gustarías hacer una página con un sistema de comentarios que se actualicen en tiempo real (Que cuando alguien haga un nuevo comentario este aparezca automáticamente en todas las PC's que esten en la misma página sin necesidad de recargarla) Tengo entendido que se debe usar Ajax, pero el problema es que Ajax solo lo hace en una computadora, es decir, si sube el comentario y si lo actualiza en tiempo real, pero solo en la máquina que subio el comentario, en las demás no, quiero hacerlo con PHP Ya que es el lenguaje con el que estoy mas familiarizado, se que para esto es mejor NodeJs pero no queiro dejar de lado a PHP Así que me gustaría poder hacer esto con PHP

¿Qué hago actualmente?

Actualmente uso un método no muy eficiente, y de hecho ya me dijeron que no lo use o podría "Sobrecargar mi servidor" en caso de que hayan demasiadas computadoras con la misma página abierta, lo que hago es que al cargar la pagina mando una peticion Ajax al servidor el cual me devolvera respuesta cuando se haya subido un nuevo comentario y de nuevo volvera a enviar la peticion en espera de un nuevo comentarrio, ¿Cómo sé cuando ya se subio un nuevo comentario? Bueno, pues en la petición Ajax que mando llama a un archivo PHP en el cual en una variable guardo el numero de filas actual que tengo en mi tabla de comentarios de mi BD y con un ciclo while vuelvo  a realizar la consulta para guardar en una nueva variable la cantidad de filas recientes que hay en mi tabla de comentarios en mi BD, este ciclo se va a estar reptiendo mientras que la variable que tiene la cantidad de filas recientes (Esta variable cambiara de valor segun el valor obtenido con las consultas hechas en el ciclo while) sea menor o igual a la variable que tiene el numero de filas actual (Esta variable solo cambiara de valor cada que se mande una nueva peticion Ajax), en resumen, a cada rato hago una consulta a la BD mediante el ciclo while para verificar que el numero de filas insertadas en la BD sea el mismo que el que habia al momento de mandar la peticion Ajax, en caso de que no sea el mismo y que sea mayor es por que alguien dejo un nuevo comentario, entonces el ciclo while se rompera y procedera a dar la respuesta a la peticion ajax la cual contendra los datos del nuevo comentario que se inserto y en la respuesta Ajax (Desde Js) tomo esos datos para despues insertarlo al documento como un comentario, y asi se actualizara en tiempo real ya que la peticion Ajax la manda la computadora al momento de cargar la pagina

Desventajas: Si se conectan demasiadas computadoras el servidor se sobrecargará con tantas peticiones al mismo tiempo, a veces se cicla la pagina y no puedo usar session_start() en mi archivo PHP por que se cicla la pagina

¿Alguien que me diga una mejor manera de hacer esto con PHP? Gracias!

PD. Se que igual se puede con WebSockets pero la verdad es que no entiendo nada, he mirado videos y aun no me queda claro de como funciona y todo ello, igual si alguien puede hacer un video explicando mejor esto lo agradeceria mucho!!!

4 Respuestas

1 positivo 0 negativos
respondido por leink01 --Regular-- (5,396 puntos) Jun 16, 2016

Si, lo mejor es con web sockets. yo hice algo así: 

instalé zeroMQ y React ambos son sockets. uno raw yy el otro web

es muy fácil de implementar. Mira te dejo la guìa que yo seguí:

http://socketo.me/docs/push

comentado por carlos052 Jun 16, 2016
¿Podrías explicarme como funcionan? Dx Es que lo que no entiendo es eso de que tengo que instalar todo eso, ¿Como lo instalaria en un hosting?
comentado por leink01 --Regular-- (5,396 puntos) Jun 17, 2016
vale deja repasar de nuevo lo que hice y en un rato más que tenga algo de tiempo hago un pequeño tuto ;)
1 positivo 0 negativos
respondido por arnoldroa Jun 19, 2016
Yo tambien quiero hacer eso probaré con el link que pusieron y les cuento..gracias :D
1 positivo 0 negativos
respondido por Dragon --Nuevo-- (1,550 puntos) Jul 3, 2016
probaré esos métodos que pusieron..ando buscando hacer algo parecido ...espero lograrlo .. alguien tendrá algún video del proceso?
0 positivos 0 negativos
respondido por Prime --Nuevo-- (574 puntos) Ene 25, 2017
probaré sus metodos que comentan. Gracias de antemano :D

Preguntas relacionadas

0 positivos 0 negativos
0 respuestas 163 visitas
0 positivos 0 negativos
2 respuestas 110 visitas
2 positivos 0 negativos
1 respuesta 1,288 visitas
1 positivo 0 negativos
2 respuestas 175 visitas
2 positivos 0 negativos
2 respuestas 186 visitas

561 preguntas

723 respuestas

674 comentarios

1,133 usuarios