Pregunta

Estoy trabajando en un servicio de notificación simple que se utilizará para enviar mensajes a los usuarios que navegan por un sitio web. Las notificaciones no tienen que enviarse en tiempo real, pero podría ser una mejor experiencia para el usuario si se produjera 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 de base de datos sencilla para recuperar los datos.

Al leer otras conversaciones sobre el tema, parece que un empuje de AJAX puede resultar en una mayor carga de servidores. Dado que puedo tolerar demoras más largas en el servidor, vale la pena tener las notificaciones push del servidor o simplemente realizar una encuesta.

No es mucho más difícil implementar el escenario push, así que 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 artículo por Mike Purvis. La carga del cliente es bastante baja en alrededor de 5k para la versión inicial y se espera que permanezca así durante bastante tiempo.


Gracias a todos por sus respuestas. Decidí usar la solución de sondeo, pero envolverlo todo en una biblioteca de utilidades para que si quieren cambiarlo luego sea más fácil.

¿Fue útil?

Solución

Debido a que el uso de una inserción requiere que se mantenga una conexión HTTP abierta entre su servidor y cada cliente, yo también iría a la encuesta, no solo va a consumir muchos recursos del servidor, sino que también será significativamente Más difícil de implementar como lo mencionó Matt b. ??

Mi experiencia con el sondeo es que si tiene un intervalo de sondeo lo suficientemente frecuente en un sitio lo suficientemente ocupado, los registros de su servidor web pueden inundarse con las solicitudes de sondeo muy rápidamente.

Editar (2017) : Yo diría que sus opciones ahora son entre websockets y encuestas largas (mencionadas en otra respuesta). Suena como un sondeo largo podría ser la elección correcta en función de la manera en que la pregunta menciona que las notificaciones no tienen que recibirse en tiempo real, un período de sondeo poco frecuente sería bastante fácil de implementar y no debería ser muy exigente para su servidor . Los websockets son geniales y una gran elección para muchas aplicaciones en estos días, aunque parece que en este caso podría ser excesivo.

Otros consejos

Me sorprende que nadie aquí haya mencionado las encuestas largas. Un sondeo largo significa mantener una conexión abierta durante un período más largo (por ejemplo, 30-60 segundos), y una vez que se cierra, volver a abrirla, y simplemente hacer que el socket / conexión escuche las respuestas. Esto da como resultado menos conexiones (pero más largas), y significa que las respuestas son casi inmediatas (es posible que algunos tengan que esperar una nueva conexión de sondeo). Me gustaría agregar que en combinación con tecnologías como NodeJS, esto da como resultado una solución muy eficiente y liviana para los recursos, que es 100% compatible con el navegador en todos los principales navegadores y versiones, y no requiere ninguna tecnología adicional como Comet o Flash.

Me doy cuenta de que esta es una pregunta antigua, pero pensé que aún podría ser útil proporcionar esta información :)

Definitivamente use push su mucho más fresco. Si solo quieres notificaciones simples, usaría algo como Servidor PushHub Push para hacer el trabajo pesado por ti. Desarrollar su propia funcionalidad Ajax Push es un camino extremadamente difícil y difícil: debe hacer que funcione en todos los navegadores y luego manejar los cortafuegos y servidores proxy que matan las conexiones de mantenimiento, etc. ¿Por qué reinventar la rueda? Además, tiene una huella igualmente baja de menos de 10 K, por lo que debería ser adecuada si esa es una prioridad para usted.

Ambos tienen diferentes requisitos y abordan diferentes escenarios.

Si necesita actualizaciones en tiempo real , como en un chat en línea, empujar es una necesidad.

Pero, si el período de actualización es grande , como ocurre en su caso (5 minutos), la solución adecuada es la combinación. Push, en este caso, requerirá una gran cantidad de recursos tanto del cliente como del servidor.

¡Sugerencia! intente hacer que la página que controla el grupo sea rápida y limpia, para que no consuma una gran cantidad de recursos en el servidor en cada solicitud. Lo que normalmente hago es mantener una marca en la memoria (como en una variable de sesión) que diga si el grupo está vacío o no ... así que, solo hago una búsqueda rápida en el grupo solo si no está vacío. Cuando el grupo está vacío, que es la mayoría de las veces, la solicitud de página se ejecuta extremadamente rápido.

Implementaría una encuesta solo porque suena más simple de escribir, y mantenerlo simple es muy valioso.

No estoy seguro de haber echado un vistazo a algunas de las implementaciones de COMET (es lo que quieres decir con AJAX push).

Si el usuario está navegando por el sitio, ¿no estará en efecto solicitando información al servidor sobre la que esta notificación se puede incluir?

Es imposible decir si el sondeo será más costoso que presionar sin saber cuántos clientes tendrá. Recomendaría el sondeo porque:

  • Parece que desea actualizar los datos una vez por minuto. A menos que las notificaciones puedan llegar a una velocidad mucho más rápida que eso, empujar significaría que mantienes una conexión HTTP abierta pero que ves muy poca actividad en ella.
  • El sondeo se basa en las convenciones de HTTP existentes, por lo que cualquier servidor que habla con navegadores web ya está listo para responder a las solicitudes de Ajax normales. Un cometa & # 8211; o la solución basada en Flash socket & # 8211; tiene diferentes requisitos; Necesitará algo como cometd en el lado del servidor y una biblioteca del lado del cliente que agrupa el empuje del lado del servidor.

Por lo tanto, si necesita algo pesado para administrar un torrente de datos y una gran cantidad de clientes, recomendaría Comet. Pero ese no parece ser el caso.

Ahora hay un servicio http://pusherapp.com que intenta resolver este problema de una vez por todas, en un parpadeo Podría valer la pena echarle un vistazo. (descargo de responsabilidad: de ninguna manera estoy asociado con ellos).

No lo he intentado yo mismo, pero algunos dicen COMET funciona y es más fácil de lo que crees . También hay un complemento de Ruby on Rails llamado Juggernaut del que he oído hablar mucho. Nuevamente, no lo he usado, así que YMMV, pero mi entendimiento es que requiere muchos menos recursos en comparación con las encuestas. Creo (¿alguien puede confirmar?) Que COMET es la forma en que MacRumorsLive.com ofrece blogs en vivo de WWDC Stevenotes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top