¿Implementación de Comet para ASP.NET? [cerrado]


103

He estado buscando formas de implementar mensajes similares a gmail dentro de un navegador y llegué al concepto de Comet . Sin embargo, no he podido encontrar una buena implementación de .NET que me permita hacer esto dentro de IIS (nuestra aplicación está escrita en ASP.NET 2.0).

Las soluciones que encontré (o que podría pensar, para el caso) requieren dejar un hilo en ejecución por usuario, para que pueda devolverle una respuesta una vez que reciba un mensaje. Esto no escala en absoluto, por supuesto.

Entonces, mi pregunta es: ¿conoce alguna implementación ASP.NET para Comet que funcione de una manera diferente? ¿Es eso posible con IIS?


12
Supongo que la implementación inicial bendecida por MS es SignalR: hanselman.com/blog/…
user423430

Node.JS ahora es compatible con Azure, pronto se admitirá IIS en 2003. Eso significa que podremos ejecutar el servidor cometa dentro de IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Respuestas:


44

Comet es un desafío para escalar con IIS debido a la conectividad persistente del cometa, pero ahora hay un equipo que analiza los escenarios de Comet. También mire el blog de Aaron Lerch, ya que creo que ha realizado algunos trabajos iniciales de Comet en ASP.NET.


9
Esto está realmente implementado; consulte WebSync, según la respuesta de Anton a continuación. ( frozenmountain.com/websync )
jvenema

3
¿Alguien llama ajax inverso? mira
Zuuum

4
Los controladores asíncronos MVC pueden ayudar a combatir los problemas de IIS al descargar la espera a subprocesos de trabajo que no son de IIS, vea esta excelente publicación de Clay Lenhart . Vea también Proyecto de ejemplo de servidor de chat en BitBucket.
Jacob

33

WebSync es un servidor Comet escalable compatible con los estándares que se integra directamente en la canalización IIS / .NET. También está disponible bajo demanda como servicio alojado.

Admite oficialmente hasta 20.000 conexiones de cliente simultáneas por nodo de servidor, pero las pruebas individuales lo han visto llegar a 50.000. El rendimiento de los mensajes es óptimo alrededor de la marca de 1,000-5,000 clientes simultáneos, con mensajes entregados hasta 300,000 por segundo desde un solo nodo.

Incluye soporte del lado del cliente para JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime y .NET Compact, con soporte del lado del servidor para .NET / Mono y PHP.

La agrupación en clústeres es compatible con SQL Server o el almacenamiento en caché de Azure listo para usar, pero se pueden escribir proveedores personalizados para casi cualquier cosa (Redis, NCache).

Descargo de responsabilidad: trabajo para la empresa que desarrolla este producto.


17
debería haber un descargo de responsabilidad aquí, ya que es su producto ...
Sam Saffron

9
Claro, es producido por la empresa para la que trabajo :) Definitivamente no estoy tratando de ocultar nada.
Anton

1
@Anton: no ocultar algo no es lo mismo que revelarlo.
RedFilter

1
@Anton ¿Puede dar más detalles sobre cómo admite hasta 20k conexiones de cliente concurrentes por nodo de servidor? Estos números parecen, bueno ... "demasiado grandes".
Pacerier

1
Supongo que no sería prudente preguntar cómo funciona websync bajo el capó, conceptualmente, desde una vista de 25.000 pies, por supuesto.
nocarrier

15

Recientemente escribí un ejemplo simple de un servidor de chat de sondeo largo utilizando controladores asíncronos MVC 3 basado en un gran artículo de Clay Lenhart

Puede usar el ejemplo en una implementación de AppHarbor que configuré según la fuente del proyecto BitBucket.

Además, hay más información disponible en la publicación de mi blog que explica el proyecto .


me gusta el ejemplo en una implementación de
AppHarbor

'entrada de blog que explica el proyecto' -> web.archive.org/web/20130328042214/http://…
jaybro

¡Gracias! Me alegro de que te haya gustado el artículo.
Clay Lenhart

4

En realidad, hay muchas opciones para crear un sitio web compatible con ajax con ASP.NET pero, sinceramente, PokeIn es la forma más fácil de crear una aplicación web compatible con cometa ajax. Ha salvado uno de los proyectos de mi empresa.



1

Una vez utilicé un sitio de chat hace mucho tiempo que utilizaba un servidor de transmisión http personalizado. De hecho, reproduje ese software en un momento por pura curiosidad, y creo que es bastante fácil de hacer. Nunca intentaría implementar un tipo similar de "solicitud infinita" en IIS, especialmente en ASP.NET, porque las solicitudes atan un subproceso de grupo de subprocesos (o subproceso de IO, si se utilizan controladores asíncronos) de forma indefinida, lo que significa que solo puede manejar tanto por servidor como lo permita la configuración de su grupo de subprocesos.

Si tuviera una fuerte necesidad legítima de dicha funcionalidad, honestamente escribiría un servidor http personalizado para ella.

Sé que eso realmente no responde a tu pregunta, pero pensé que la entrada podría ser relevante.


1

El grupo WS-I publicó algo llamado "Perfil seguro confiable" que tiene una implementación de Glass Fish y .NET que aparentemente interactúan bien.

Con suerte, también existe una implementación de Javascript .

También hay una implementación de Silverlight que usa HTTP Duplex. Puede conectar javascript al objeto Silverlight para obtener devoluciones de llamada cuando se produce una inserción.

También hay versiones comerciales de pago .


4
Publicar en forma masiva exactamente la misma respuesta sobre una serie de preguntas en una breve sucesión tiende a tropezar con algunas banderas ...
Marc Gravell

2
( psst )

0

Creo que el enfoque de Comet no es realmente escalable a menos que esté preparado para expandir la granja web horizontalmente (agregando más servidores web a la mezcla). La forma en que funciona es que deja una conexión TCP abierta por sesión de usuario, solo para que el servidor pueda insertar cosas en esa conexión de vez en cuando para informar inmediatamente al usuario de un cambio o actividad.


6
Todo es solo escalable verticalmente hasta un punto, después del cual debe tener lugar el escalamiento horizontal.
Anton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.