javascript - como - sweet alert bootstrap
Notificación al cliente, ¿debo usar un AJAX Push o Poll? (9)
Estoy trabajando en un servicio de notificación simple que se utilizará para entregar mensajes a los usuarios que navegan en un sitio web. Las notificaciones no tienen que enviarse en tiempo real, pero podría ser una mejor experiencia para el usuario si ocurrieran con más frecuencia que cada 5 minutos. Los datos que se envían desde y hacia el cliente no son muy grandes y es una consulta directa de la base de datos para recuperar los datos.
Al leer otras conversaciones sobre el tema, parece que una inserción AJAX puede dar como resultado una mayor carga del servidor. Como puedo tolerar demoras más prolongadas en el servidor, vale la pena tener las notificaciones push del servidor o simplemente sondear.
No es mucho más difícil implementar el escenario push y entonces pensé que vería cuál era la opinión aquí.
Gracias por tu ayuda.
EDITAR: He investigado un simple AJAX Push e implementado una demostración simple basada en este article de Mike Purvis. La carga del cliente es bastante baja, alrededor de 5k para la versión inicial y se espera que permanezca así por bastante tiempo.
Gracias a todos por sus respuestas. Decidí ir con la solución de sondeo, pero para envolverla en una biblioteca de utilidades para que, si quieren cambiarla más adelante, sea más fácil.
Ahora hay un servicio http://pusherapp.com que está tratando de resolver este problema de una vez por todas, en un abrir y cerrar de ojos. Podría valer la pena echarle un vistazo. (descargo de responsabilidad: de ninguna manera estoy asociado con ellos).
Ambos tienen diferentes requisitos y abordan diferentes escenarios.
Si necesita actualizaciones en tiempo real , como en un chat en línea, push es obligatorio.
Pero, si el período de actualización es grande , como lo es en su caso (5 minutos), el grupo es la solución adecuada. Push, en este caso, requerirá una gran cantidad de recursos tanto del cliente como del servidor.
¡Propina! intente hacer que la página que revisa el grupo sea rápida y limpia, para que no consuma muchos recursos en el servidor en cada solicitud. Lo que suelo hacer es mantener una bandera en la memoria (como en una variable de sesión) que dice que si la agrupación está vacía o no ... entonces, solo hago que havy busque en la agrupación solo si no está vacía. Cuando el grupo está vacío, que es la mayor parte del tiempo, la solicitud de página se ejecuta extremadamente rápido.
Debido a que el uso de un push requiere que se mantenga una conexión HTTP abierta entre su servidor y cada cliente, yo también elegiría la encuesta, esto no solo consumirá muchos recursos del servidor, sino que también será mucho más complicado. implementar como matt b mencionado.
Mi experiencia con el sondeo es que si tiene un intervalo de sondeo bastante frecuente en un sitio lo suficientemente ocupado, los registros de su servidor web pueden verse inundados de solicitudes de encuesta rápidamente.
Editar (2017) : Yo diría que sus elecciones ahora son entre WebSockets y Long Polling (mencionado en otra respuesta). Parece que una encuesta larga puede ser la elección correcta en función de la forma en que la pregunta menciona que las notificaciones no necesitan ser recibidas en tiempo real, un período de votación poco frecuente sería bastante fácil de implementar y no debería ser muy agotador para su servidor . Websockets son geniales y una gran opción para muchas aplicaciones hoy en día, aunque suena como que podría ser exagerado en este caso.
Definitivamente uso push es mucho más fresco. Si solo quieres notificaciones simples, usaría algo como StreamHub Push Server para hacer el trabajo pesado por ti. Desarrollar su propia funcionalidad de Ajax Push es un camino extremadamente complicado y difícil: tiene que hacerlo funcionar en todos los navegadores y luego manejar cortafuegos y servidores proxy matando a las conexiones para mantener vivo, etc. ... Por qué reinventar la rueda. Además, tiene una huella similar de menos de 10 K, por lo que debería ser adecuado si es una prioridad para usted.
Es imposible decir si las encuestas serán más caras que presionar sin saber cuántos clientes tendrá. Yo recomendaría las encuestas porque:
- Parece que desea actualizar datos una vez por minuto. A menos que las notificaciones puedan llegar a un ritmo mucho más rápido que eso, presionar significaría mantener abierta una conexión HTTP pero viendo muy poca actividad en ella.
- El sondeo se basa en las convenciones HTTP existentes, por lo que cualquier servidor que hable con navegadores web ya está listo para responder a las solicitudes Ajax normales. Una solución basada en socket Comet o Flash tiene diferentes requisitos; necesitarás algo como
cometd
en el lado del servidor y una biblioteca del lado del cliente que compila el empuje del lado del servidor.
Entonces, si necesitabas algo pesado para administrar un torrente de datos y una gran cantidad de clientes, recomendaría Comet. Pero ese no parece ser el caso.
Estoy sorprendido de que nadie aquí haya mencionado una larga encuesta. El sondeo largo significa mantener una conexión abierta durante un período más prolongado (digamos 30-60 segundos), y una vez que está cerrada, volver a abrirla de nuevo, y simplemente hacer que el conector / conexión escuche las respuestas. Esto da como resultado menos conexiones (pero más largas), y significa que las respuestas son casi inmediatas (algunos tendrán que esperar una nueva conexión de sondeo). Me gustaría añadir que, en combinación con tecnologías como NodeJS, esto resulta en una solución muy eficiente y ligera, que es 100% compatible con el navegador en todos los principales navegadores y versiones, y no requiere ninguna tecnología adicional como Comet o Destello.
Me doy cuenta de que esta es una vieja pregunta, pero pensé que aún podría ser útil proporcionar esta información :)
Implementaría una encuesta solo porque suena más fácil de escribir, y mantenerla simple es muy valiosa.
No estoy seguro de que haya echado un vistazo a algunas de las implementaciones de COMET que existen (eso es lo que quiere decir con el comando AJAX).
Si el usuario está navegando por el sitio, ¿no estará en efecto solicitando información del servidor que esta notificación pueda aprovechar?
No lo he intentado solo, pero algunos dicen que COMET funciona y es más fácil de lo que piensas . También hay un complemento de Ruby on Rails llamado Juggernaut que he oído hablar mucho. Una vez más, no lo he usado, por lo tanto, YMMV, pero tengo entendido que se requieren muchos menos recursos en comparación con las encuestas. Creo (¿alguien puede confirmar?) Que COMET es cómo MacRumorsLive.com ofrece blogs en vivo de WWDC Stevenotes.