2012-05-15 11 views
6

Parece haber varias opciones disponibles en este momento para hacer una programación asincrónica/push-style con asp.net. Pero estoy un poco confundido sobre qué es lo mejor y qué ofrece el enfoque más amigable para los desarrolladores. Cosas que ya he encontrado son,La mejor manera de hacer una programación asíncrona con Asp.Net

nodejs

SignalR

Using PushStreamContent (Web API) and something like KnockoutJS

Aunque SignalR is deemed to make it to asp.net 4.5, veo mucho interés en nodejs within MS (especialmente alrededor de Azure). ¿Alguien puede arrojar algo de luz sobre las diferencias (al menos de NodeJs y SignalR)?

Respuesta

15

SignalR es "una biblioteca de cliente y servidor para .NET que presta servicios de mensajería y una abstracción a través de una conexión persistente." Esto no hace mágicamente que su código sea asincrónico, solo permite que su servidor llame a los clientes (incluido JavaScript ejecutándose en los navegadores de sus usuarios) de forma asincrónica.

Sin embargo, C# 5.0 que se incluye en .NET 4.5 & Visual Studio 2012 (así como en Mono 2.11+) le permite escribir/modificar el código para ser asíncrono a través del uso de las nuevas async & await palabras clave.

Si ya eres desarrollador de .NET, C# async & aguarda y SignalR son muy fáciles de recoger, aprender y ejecutar, lo que te permite construir sistemas altamente escalables y de muy alto rendimiento.

Node.js que permite escribir el código en JavaScript y alojarlo en un servidor de aplicaciones.

nodo está recibiendo mucha atención por el momento, pero si usted está viniendo de un fondo de desarrollo .NET, vale la pena señalar algunas de las cosas que pueden sorprender/molestarle cuando se mueve a JavaScript en el servidor:

  1. JavaScript es un lenguaje muy potente y extremadamente flexible de tipos dinámicos. Sin embargo, esta flexibilidad puede ser muy peligrosa y problemática hasta que haya aprendido sus muchos defectos y cómo superarlos. Si DEBE ejecutar código JavaScript, considere escribir su fuente en idiomas como TypeScript y CoffeeScript que se compilan en JavaScript pero lo aíslan de muchos de los peligros de JavaScript.

  2. Mientras nodo ofrece una gran capacidad de despacho asíncrono, su rendimiento de ejecución de código puede ser mucho más lento que la ejecución de C#. Si su código hace poco o ningún procesamiento de datos, es posible que no note este problema. Sin embargo, si su código hace una buena cantidad de procesamiento de datos/cálculos/análisis/etc., puede encontrar que el rendimiento de JavaScript del nodo es inaceptable.

  3. Nodo es un único subproceso! Si su código tiene que realizar un procesamiento pesado, por ejemplo, realizar un cálculo complejo sobre una gran cantidad de datos, evitará que una instancia de nodo único sirva otras solicitudes entrantes hasta que se complete cada operación de procesamiento. Por lo tanto, deberá planificar habilitar node clustering (actualmente una función experimental) o si aloja nodo en Windows, use IIS & IISNode] 4 que maneja la administración de instancias de nodos mediante la impresionante (IIS &) infraestructura de Activación de procesos de Windows.

  4. Comparado con el típico.La experiencia de depuración de desarrolladores de NET, el código de depuración que se ejecuta bajo el nodo es un proceso lento y engorroso en este momento. Para hacerlo, debe usar el inspector de nodos y el navegador web Chrome para depurar el código, pero la experiencia es deficiente: los puntos de interrupción no se conservan en todas las ejecuciones; los puntos de corte condicionales no son compatibles; la pila de llamadas mostrada es superficial; etc.

+1

Lista decente, pero hay un par de problemas evidentes. El motor de javascript V8 es rápido. Es muy rápido en realidad. Hay ciertos casos de uso en los que C# es más rápido, y lo creas o no, en algunos casos, javascript sobresale (regex). De todos modos, nada de esto es probable que sea un problema de una forma u otra en una aplicación web, ya que la ejecución de código para prácticamente cualquier idioma en estos días es * lo suficientemente rápido *. El otro problema es hablar de javascript como función. Si bien eso es cierto, será mejor que escribas código de manera funcional también en C# si estás usando SignalR an Async. –

+0

Y sí, estoy de acuerdo ... las herramientas de JavaScript apestan ahora, especialmente cuando estás acostumbrado a Visual Studio. –

+0

Me voy a quedar con SignalR, parece. Sin embargo, tengo que probar el nodo alguna vez. Tkx por la respuesta detallada! – Illuminati

Cuestiones relacionadas