2010-10-17 12 views
9

Estoy tratando de crear una solución de transmisión para una aplicación interna, pero estoy dibujando espacios en blanco para que una solución supere un obstáculo. Actualmente, en mi ejemplo de trabajo, estoy usando APE, pero debido a restricciones no puedo tener ningún proceso en ejecución en el equipo host, por lo que no puedo ejecutar el servidor APE.Transmitiendo con Node.js, o cualquier otra solución de Comet

Estoy buscando alternativas, pero todo lo que he encontrado hasta ahora ha requerido ejecutar procesos en el servidor.

Algunos detalles sobre el proyecto.

  • Habrá aproximadamente 25 personas que se conectaron a la vez
  • Lo ideal sería que todo el mundo debería ver las actualizaciones al mismo tiempo, tan pronto como estén disponibles.
  • Se ejecutará en un entorno Windows, por lo que las soluciones C# /. NET serían preferibles a cosas como PHP.

Cualquiera tiene alguna idea, si node.js es capaz de manejar esto o cualquier otra solución?

+2

Creo que el nodo no está disponible en Windows, podría estar equivocado. – Robert

Respuesta

10

El problema es que los servidores web tradicionales usan un enfoque de subprocesos por socket para manejar usuarios concurrentes, lo que no siempre es óptimo para las técnicas de sondeo cometas/largas. (Las versiones más nuevas de IIS tienen una forma de conectar sus propios manejadores de conexión, que obtendré también a continuación.)

Para los servidores web tradicionales, más a menudo el objetivo es obtener una conexión, servir al usuario algo lo más rápido posible, y pasar a la siguiente conexión. Si una conexión persiste por mucho tiempo, es porque probablemente esté haciendo algo de manera intensiva, como una gran descarga o una gran consulta, pero en general usa activamente la CPU para que el modelo con subprocesos funcione bastante bien.

En cometa (larga encuesta), normalmente se está conectando a un servidor web donde simplemente espera que ocurra un evento, y la mayoría de las veces. Esto promueve más conexiones concurrentes. También hay chacnes que muchos de estos usuarios esperan que ocurran los mismos eventos en todos los ámbitos.

Asignar un hilo para que el usuario simplemente centrifugue y espere no es un modelo muy óptimo para este tipo de cosas. Un mejor modelo es un servidor web basado en bucle de eventos que hace todo de manera asincrónica, y donde enviar un evento a múltiples usuarios no implica un cambio de contexto costoso para cada cliente. Esto sobre lo que se basa Node.js (usando libevent como su núcleo), así como Ruby Eventmachine, Twisted Python, Friendfeed's Tornado, Jetty, y el servidor basado en C# Manos.

Es por eso que a menudo es más ventajoso tener un cometa hecho en su propio proceso personalizado como servidor personalizado ya que los servidores web tradicionales como Apache y las versiones anteriores de IIS no funcionan en una cuestión que es eficiente para las necesidades de Comet.

Las aplicaciones estándar de ASP.NET están un poco atornilladas debido a que el grupo de subprocesos en .NET está limitado a 25 subprocesos generales y 25 subprocesos de IO (y las conexiones http toman un subproceso de E/S). En realidad, puede estar limitado a ser un poco menos que eso en realidad porque el grupo de subprocesos se comparte con todas las demás cosas en .NET. Sin embargo, puedes cambiar el grupo de subprocesos con una configuración, pero el rendimiento tiende a decaer exponencialmente a medida que más subprocesos ingresas. En teoría, puedes subir este número si puedes garantizar que no crecerás demasiado, y entonces posiblemente solo use monitores de hilos estándar en .NET para construir su propia cosa de despacho de eventos de cometas.

Sin embargo, las aplicaciones .NET que ejecutan versiones más nuevas de IIS sí tienen un rayo de esperanza. Puede crear un IAsyncHttpHandler personalizado. Hay algunas excelentes guías en línea para que lea sobre cómo funciona esto. Con eso puedes construir tu propio grupo de conexiones y atender a tus clientes de manera más eficiente. No es una solución perfecta y tienes que construir mucha tubería por tu cuenta. WebSync es un producto comercial que envuelve esta interfaz para usted y le ofrece algunas piezas de marco de alto nivel con las que puede trabajar sin embargo.

+0

Relacionados: Comet for Azure/IIS: http://www.windowsazure.com/en-us/develop/nodejs/ – LamonteCristo

0

Puede implementarlo solo, utilizando la agrupación larga. 25 solicitudes simultáneas no deberían ser un problema para IIS. Solo eche un vistazo a lo que APE transmite a los clientes; está bastante claro cómo volver a implementarlo en 100 líneas de código (me refiero a la serialización en el formato compatible).

1

WebSync sería una buena solución para usted; se ejecuta en IIS, por lo que no se necesitan procesos externos. Verifique here.

0

¿Has mirado PubNub? Puede ser capaz de manejar lo que estás haciendo. Cuesta dinero, pero también recibe un montón de transacciones gratuitas. No estoy seguro de qué tipo de carga espera.

Cuestiones relacionadas