2012-05-15 9 views
6

zu tun Es scheint, dass derzeit mehrere Optionen verfügbar sind, um async/push-style-Programmierung mit asp.net zu tun. Aber ich bin etwas verwirrt darüber, was das Beste ist und was den entwicklerfreundlichsten Ansatz bietet. sind Dinge, die ich schon begegnet sind,Der beste Weg, Async-Programmierung mit Asp.Net

NodeJS

SignalR

Using PushStreamContent (Web API) and something like KnockoutJS

Obwohl SignalR is deemed to make it to asp.net 4.5, sehe ich ein großes Interesse an NodeJS within MS (speziell um Azure). Kann jemand die Unterschiede (von mindestens NodeJs und SignalR) beleuchten?

Antwort

15

SignalR ist "eine Client- und Server-Bibliothek für .NET, die Messaging und eine Abstraktion über eine persistente Verbindung bereitstellt." Das macht Ihren Code nicht magisch asynchron - er erlaubt Ihrem Server nur den Aufruf von Clients (einschließlich JavaScript, das in den Browsern Ihrer Benutzer läuft) asynchron.

jedoch, C# 5.0, die Schiffe in .NET 4.5 & Visual Studio 2012 (wie auch in Mono 2.11+) Sie Code schreiben können/ändern async durch den Einsatz der neuen async & await Schlüsselwort zu sein.

Wenn Sie bereits ein .NET-Entwickler sind, C# async & erwarten und SignalR sind sehr einfach zu erlernen, erlernen und ausführen, so dass Sie hoch skalierbare, sehr leistungsfähige Systeme erstellen können.

Node.js ermöglicht Ihnen, Ihren Code in JavaScript zu schreiben und auf einem App-Server zu hosten.

Knoten wird eine Menge Aufmerksamkeit im Moment bekommen, aber wenn Sie von einer .NET-Entwicklung Hintergrund kommen, es lohnt sich einige der Dinge, unter Hinweis darauf, dass Sie möglicherweise überraschen/ärgern, wenn auf dem Server JavaScript bewegt:

  1. JavaScript ist eine sehr leistungsfähige und extrem flexible dynamisch typisierte Sprache. Diese Flexibilität kann jedoch sehr gefährlich und problematisch sein, bis Sie ihre vielen Fehler gelernt und diese überwunden haben. Wenn Sie JavaScript-Code ausführen MÜSSEN, sollten Sie Ihre Quelle in Sprachen wie TypeScript und CoffeeScript schreiben, die auf JavaScript kompilieren, aber Sie von vielen JavaScript-Gefahren isolieren.

  2. Während der Knoten große asynchrone Dispatch-Funktionen bietet, kann seine Code-Ausführungsleistung viel langsamer sein als die Ausführung von C#. Wenn Ihr Code wenig/keine Daten verarbeitet, bemerken Sie dieses Problem möglicherweise nicht. Wenn Ihr Code jedoch eine beträchtliche Menge an Datenverarbeitung/Berechnungen/Analysen/etc. durchführt, können Sie feststellen, dass der JavaScript-Performance-Hit eines Knotens nicht akzeptabel ist.

  3. Knoten ist single-threaded! Wenn Ihr Code eine starke Verarbeitung durchführen muss, z. B. eine komplexe Berechnung für eine große Datenmenge, wird verhindert, dass eine einzelne Knoteninstanz weitere eingehende Anforderungen bedient, bis jeder Verarbeitungsvorgang abgeschlossen ist. Daher müssen Sie die Aktivierung von node clustering (derzeit eine experimentelle Funktion) oder planen, wenn Sie Knoten unter Windows hosten, verwenden Sie IIS & IISNode] 4, die Knoteninstanzverwaltung mit der (genialen) IIS & Windows Process Activation-Infrastruktur behandelt.

  4. Im Vergleich zu den typischen.Die Debugging-Erfahrung von NET-Entwicklern, Debugging-Code, der unter Knoten läuft, ist ein langsamer und umständlicher Prozess. Um dies zu tun, müssen Sie node-inspector und den Chrome-Webbrowser verwenden, um den Code zu debuggen. Die Erfahrung ist jedoch schlecht: Haltepunkte werden nicht über die Läufe hinweg beibehalten. Bedingte Haltepunkte werden nicht unterstützt. der angezeigte Aufrufstapel ist flach; etc.

+1

Anständige Liste, aber es gibt ein paar eklatante Probleme. Die V8-Javascript-Engine ist schnell. Es ist wirklich sehr schnell. Es gibt bestimmte Anwendungsfälle, in denen C# schneller ist, und ob Sie es glauben oder nicht, einige, bei denen JavaScript ausgezeichnet ist (Regex). Nichtsdestoweniger ist dies wahrscheinlich kein Problem in einer Webanwendung, da die Codeausführung für so ziemlich jede Sprache * schnell genug * ist. Das andere Problem ist über das Funktionieren von Javascript zu sprechen. Während das wahr ist, solltest du Code in C# auch funktional schreiben, wenn du SignalR und Async verwendest. –

+0

Und ja, ich stimme zu ... JavaScript-Tools saugen gerade jetzt, vor allem, wenn Sie an Visual Studio gewöhnt sind. –

+0

Ich bleibe bei SignalR es scheint. Nichtsdestotrotz, versuchen Sie es irgendwann einmal. Tkx für die detaillierte Antwort! – Illuminati