Obtener el valor en tiempo real de un campo de una base de datos (Mysql)

CosmicBetelgeuse

Beta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios!
Desde
8 Nov 2018
Mensajes
45
Buenas!,

He creado una web con HTML5, CSS3, javascript/jquery, PHP, MySQL... y me estoy planteando implementarle una funcionalidad en tiempo real.

Se trataría de que, según el valor de un campo de la base de datos (mysql), mostrar una imagen u otra en la web. También he pensado en crear un sistema de notificaciones: si un campo mysql tiene determinado valor enviar una notificación al usuario.

El problema lo tengo en como hacerlo en tiempo real sin que el usuario tenga que hacer nada. He pensado en que tal vez los websockets pudieran ser una buena opción pero nunca he utilizado websockets/Nodejs y no se si sería engorroso implementarlo/utilizarlo.

La web a veces puede llegar a tener unos 1.000 usuarios en un mismo momento (utilizo un servidor vps sencillito)

¿Algún consejo?

Gracias!
 

SvenDev

VIP
Gamma
Programador
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
26 Sep 2016
Mensajes
210
La verdad crear un server de websockets en nodejs es bastante fácil, puedes hacerlo haciendo comparaciones en la DB para verificar los cambios desde el mismo nodejs o avisando directamente desde PHP cada vez que hagas un update, dependiendo las necesidades de tu proyecto.
 

SvenDev

VIP
Gamma
Programador
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
26 Sep 2016
Mensajes
210
Ya si no quieres utilizar nodejs, puedes hacerlo con ajax verificando la colunma cada segundo pero será un poco mas lento para el usuario y mas pesado para el servidor.
 

kj2

VIP
Iota
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Desde
1 Abr 2011
Mensajes
2.246
Puedes probar usar sockets en PHP:


Aquí te dejo un par de ejemplos de uso:


Igual tendrías como una tercer opción el usar deno (ya tiene su primera versión estable) en lugar de nodejs.

No es recomendable que hagas algo como usar un ajax que actualice cada segundo o podrías conseguir sin darte cuenta, hacerte un auto-ataque DDoS. Ten cuidado de no ponerte a hacer más o menos lo mismo con la BD.

La dificultad de hacerlo y el rendimiento son cosas que puedes probar tu mismo, desde mi lado la dificultad me parece similar en los 3 casos.

PD: De poder, en realidad podrías usar websocket con lo que te de la gana, puedes usar C, Python, Rust, Go, etc. Si vas a lo que es mas óptimo, muy probablemente antes que usar PHP o JS, terminarías usando un lenguaje compilado.

PD2: ¿JQuery?
DG1kpEY.jpg
 
Última edición:

CosmicBetelgeuse

Beta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios!
Desde
8 Nov 2018
Mensajes
45
Veo que para trabajar con websocket en PHP no es necesario librerías, sin embargo existen unas cuantas...
¿Tal vez se recomienda el uso de librerías por que es más estable?
 

kj2

VIP
Iota
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Desde
1 Abr 2011
Mensajes
2.246
Veo que para trabajar con websocket en PHP no es necesario librerías, sin embargo existen unas cuantas...
¿Tal vez se recomienda el uso de librerías por que es más estable?

Las librerías, como en todos los lenguajes, lo que suelen procurar es simplificar el uso para agilizar las tareas (aunque de paso lastren rendimiento u otros problemas, pero no puedes pedir que todo sea perfecto). Básicamente porque además de ahorrarte líneas, pueden igual ahorrarte el tener que comprender lo que usas (los sockets, en este caso) y en su lugar solo tener que aprender lo que la librería te pone en su documentación (que muchas veces es simplificado al nivel copiar y pegar).

Por ej. la librería de elephant.io, si mal no estoy, te permite usar los sockets de php de un modo compatible con el javascript de socket.io, cosa que haciendo desde 0 sería más largo de tener que comprender e implementar, pero con la librería te ahorras ese trabajo y lo cambias por el comprender la librería solamente.

kj
 

slack

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios!
Desde
29 Jun 2020
Mensajes
45
Yo no me la complicaría tanto. Lo haría con AJAX actualizando cada tanto segundos. De hecho muchas webs grandes los hacen.
 

CosmicBetelgeuse

Beta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios!
Desde
8 Nov 2018
Mensajes
45
Tal vez usando ajax sería suficiente (aunque entiendo que no sería la forma más optimizada).
El tema está en que no necesito una comunicación bidireccional, sería solo unidireccional, para enviar datos del servidor al cliente y tal vez utilizar websockets sería un poco "bestia" para lo que necesito... ¿y los Server Sent Events (SSE)?
 

Crea una cuenta o accede para comentar

Debes ser un miembro para poder comentar

Crear cuenta

Crea una cuenta en nuestra comunidad

Acceder

¿Ya tienes una cuenta? Accede aquí


Arriba