2010-08-04 9 views
6

Tengo un cliente basado en JavaScript que actualmente está sondeando un servicio web .NET para nuevos contenidos. Mientras la votación funciona ... no estoy contento con este enfoque porque estoy usando los recursos del sistema y creando gastos generales cuando no hay cambios para recibir.¿Desea enviar mensajes a clientes desde una aplicación del lado del servidor?

Mi pregunta es ¿cómo notifico a mi cliente (s) que hay nuevo contenido para que se muestre? Estoy abierto a cualquier tecnología adicional con la que tenga que implementar esta solución.

Respuesta

7

En primer lugar, la votación es el camino a seguir. Puede hacerlo con Flash o Silverlight o Comet - http://en.wikipedia.org/wiki/Comet_(programming) que puede mantener abierta una conexión tcp para las notificaciones. Una página web en sí misma no puede mantener un socket abierto, por lo que no hay forma de notificar directamente a un cliente web.

[Editar] Pero pensar en ello, ¿cuántas cliente puede mantener una conexión TCP hacia un servidor a la vez? Para un sistema más grande, se quedarán sin enchufes disponibles con bastante rapidez, ya que hay 65k puertos disponibles.
Cuántas conexiones simultáneas puede manejar su servidor depende de sus recursos de hardware. Si tienes suficiente memoria y CPU, deberías poder manejar ~ 100k y tal vez más. Pero si cada solicitud accede a una base de datos u otro recurso a través de tcp/ip, podría estar limitado a la cantidad de puertos por ip disponible (65k). También debe hacer que las solicitudes de inserción vayan en contra de un dominio separado, ya que normalmente un navegador limita a dos conexiones simultáneas por dominio, por lo que no interferirá con la carga normal de la página.

El uso de sondeo en combinación con servidores de caché en la parte frontal es una buena solución. Puede tener lógica en el servidor que actualice el caché por cliente, reduciendo la carga para cada encuesta. Puede actualizar la memoria caché para los usuarios que han iniciado sesión o sondeado dentro del número X de minutos para reducir aún más la actualización de la memoria caché. Y para mí implementar la atracción es más fácil que tirar, la tecnología es sabia.

+1

Sí, se puede hacer sin Flash ni Silverlight; mira las respuestas sobre http://en.wikipedia.org/wiki/Comet_%28programming%29 –

+1

@Marcel: gracias ... edité mi respuesta para reflejar eso. –

+0

Gran respuesta, esto me dio algunos buenos lugares para empezar a buscar. – Achilles

2

Debe investigar acerca de COMET.

COMET es una técnica que permite un servidor para enviar datos a través de los navegadores cliente HTTP una línea abierta de la comunicación.

Probablemente hay ejemplos overthere sobre los servicios Web COMET + WCF.

1

Ya le informaron sobre el sondeo HTTP (COMET). Esto deja abierta la cuestión de cómo el servidor http sí mismo (IIS + ASP) detectar los cambios en la base de datos sin sondear la base de datos. Con SQL Server puede usar una tecnología como Query Notifications, que le permite notificar su proceso ASP.Net cuando se produce un cambio en la base de datos en un registro que ha sido almacenado en caché. También puede consultar el proyecto LinqToCache que permite que la notificación de consulta se mezcle con consultas LINQ.

2

Consulte WebSync, una solución de cometa para .NET/IIS. Hará exactamente lo que estás buscando. No hay recursos adicionales para desperdicio de la votación, presione solo cuando sea necesario, actualizaciones en tiempo real ... todo el total de 9 yardas.

Cuestiones relacionadas