Estrategias Web para notifiaciones

29
Mensajes - Notificaciones Algunas técnicas de comunicación en la web @EguiMariano

Transcript of Estrategias Web para notifiaciones

Mensajes - NotificacionesAlgunas técnicas de comunicación en la web

@EguiMariano

About me...Mariano Germán Egui

Trabajo como desarrollador webMe gustan las buenas prácticasMe preocupa la seguridad de la aplicaciónParticipó de Meetups y voy a conferencias relacionadas a desarrollo e InfraestructuraSoy 100% amateur, programo en muchos lenguajes y me mande hacer el elefante de PHP

Twitter: @EguiMariano

[email protected]

@EguiMariano

La necesidad...Enviar por algún medio información, notificaciones o algún cambio importante que necesita impactar en UI sin esperar la acción de un usuario.

@EguiMariano

Nuestras opciones:

● AJAX● Long poll● Server-Sent Events● WebSockets● WebRTC

@EguiMariano

AJAXEl cliente (navegador) con Javascript envía un request al servidor, y obtiene un response del servidor, terminando la conexión.

Se deberá programar para que se ejecute de forma automática y con un intervalo entre cada request.

El servidor deberá esperar que el cliente inicie un llamado ajax (request) para poder enviar las novedades.

@EguiMariano

Long poll / Long pollingEl cliente envía un request al servidor tipo AJAX, pero el servidor mantiene la petición keep-alive (conexión abierta) durante algún tiempo (no mucho), durante la petición el servidor espera acumular o recibir datos para enviar el response y terminar. El cliente tiene que volver a conectar periódicamente después que la petición es cerrada.

En el lado del servidor el request HTTP es tratado como una simple petición, exceptuando que el response se enviará en algún momento o en el futuro definido por la lógica de la aplicación.

@EguiMariano

request → wait → response

@EguiMariano

Server-Sent EventsEl cliente establece conexión persistente y a largo plazo con el servidor. Sólo el servidor puede enviar datos al cliente. Si el cliente desea enviar datos al servidor deberá utilizar otras tecnologías / protocolos para hacerlo. Este protocolo HTTP es compatible y fácil de implementar en la mayoría de los lenguajes de programación. Este protocolo es preferible para ser usado en lugar de Long Polling

@EguiMariano

WebSocketsEl cliente crea una conexión TCP con el servidor, y la mantiene tanto tiempo como sea necesario. Servidor o el cliente puede cerrar esta conexión. El cliente pasa a través de HTTP un proceso de protocolo compatible, si tiene éxito, entonces el servidor y el cliente pueden intercambiar datos de ambas direcciones en cualquier momento. Es muy eficiente si la aplicación requiere el intercambio de datos frecuente en ambos sentidos, como los juegos. El costo de conexion es igual a Server-Send Events por lo que seria mas practico su implementación y permitirá mañana el intercambio de mensajes.

@EguiMariano

WebRTC (Real-Time Communications)Una conexión para establecer la comunicación entre los clientes, la conexión es independiente del modo utiliza UDP, TCP o capas incluso más abstractas. Esto se utiliza generalmente para la transferencia de datos de gran volumen, como la transmisión de vídeo / audio. La calidad puede ser sacrificada en favor de tiempo de respuesta y la entrega de al menos algo. Ambas partes (pares) pueden enviar datos entre sí de forma independiente.

@EguiMariano

Si bien se puede utilizar totalmente independiente de cualquier servidor centralizarlo aún es requerido de alguna forma para el intercambio de datos de puntos finales, en los que en la mayoría de los casos los desarrolladores todavía utilizan servidores centralizados como "link". Esto sólo es necesario para el intercambio de datos esenciales para el establecimiento de conexión entre clientes. Después de la conexión que se estableció con el cliente la conexión con el servidor no es necesaria.

@EguiMariano

Hablemos de compatibilidad

: -(@EguiMariano

Como todos sabemos…Google Analytics sigue indicando que casi un 20~30% de nuestros usuarios usan IE 10… 8… 7…… 6….

Dependiendo de nuestro negocio y a quienes apuntamos elegiremos la tecnología más adecuada para nosotros.

@EguiMariano

¿Que es más importante?

Vender….

O tener usuarios para vender...

@EguiMariano

Y de cuantas conexiones hablamos…Server-Sent Events / WebSockets: 1.4k a 10k conexiones simultáneas dependiendo del hardware y configuración del SO.WebRTC: 10 a 650 conexiones dependiendo el ancho de banda y el navegador.Ajax - Long Poll: Depen del WebServer, su configuración y el hardware.

La tecnología que usemos impactará en la lógica de desarrollo para poder escalar tantas instancias como usuarios concurrentes tengamos. OJO no es un dato menor!

@EguiMariano

Ventajas de WebSocketsLa principal ventaja de WebSockets como solución, es que no es la solicitud HTTP (después del apretón de manos), pero si es protocolo de comunicación basado mensajes. Eso le permite lograr enormes ventajas de rendimiento y arquitectura. Por ejemplo, en Node.js puede compartir la misma memoria para diferentes conexiones de socket, de manera de que puedan acceder a las variables compartidas. Así que no es necesario utilizar la base de datos como punto de intercambio en el medio (como AJAX o Long Poll con PHP). Puede almacenar datos en la memoria RAM, o incluso volver a publicar entre conexiones enseguida.

@EguiMariano

Consideraciones de SeguridadLa gente a menudo están preocupados acerca de la seguridad de WebSockets. La realidad es que no hay mucha diferencia o incluso pone WebSockets como una mejor opción. En primer lugar con AJAX existe una mayor probabilidad de MITM porque cada solicitud es nueva conexión TCP y atravesando a través de la infraestructura de Internet. Con WebSockets, una vez que está conectado, es mucho más difícil de interceptar en el medio, con su capa de enmascaramiento, además, forzada cuando se envían los datos desde el cliente al servidor, así como la compresión adicional, que requiere más esfuerzo para sondear los datos. Todos los protocolos actuales son compatibles con ambos: HTTP y HTTPS (cifrado).

@EguiMariano

¿Preguntas?Twitter: @EguiMariano

[email protected]