Node.Js + Socket.IO gegen SignalR gegen C # WebSocket Server

75

Ich habe derzeit eine TCP-Serveranwendung in .Net geschrieben, die Nachrichten empfängt und an Clients sendet. Ich möchte eine Webanwendung erstellen, benötige also die Kommunikationsschicht.

Ich habe eine Node.JS + Socket.IO-App erstellt, die eine Verbindung zu meinem TCP-Server herstellt und dann die Kommunikation zur Webanwendung pusht. Alles funktioniert einwandfrei.

Ich habe gerade über SignalR als Alternative gelesen, um es im .Net-Stack zu behalten.

Ich habe jedoch auch festgestellt, dass ich einen C # Websocket Server schreiben kann, eine grundlegende Demo hier

Ich gehe davon aus, dass dieser Basisserver das ist, was SignalR ist, aber offensichtlich mit viel mehr Funktionalität darin?

Ich versuche zu entscheiden, ob ich meine aktuelle TCP-Anwendung nur an einen Websocket-Server anhänge oder ob ich eine separate SignalR- oder Node.js-Route gehe. Aus Interesse, wie läuft eine SignalR-Anwendung als Windows-Dienst, Konsolen-App oder IIS-Dienst?

Jon
quelle
1
Für Informationen können Sie auch SuperWebSocket ausprobieren. Im Moment habe ich gerade einen WebSocket-Server direkt geschrieben. Es gibt nur 2 Schlüsselprotokolle im Spiel (der Rest sind praktisch identische Varianten), es ist also nicht massiv. Ich warte teilweise auf .net 4.5 / win8, das die Unterstützung von WebSocket-Servern für OOTB enthält.
Marc Gravell
@MarcGravell Danke. Hier ist ein Beitrag, der zeigt .Net 4.5 Websocket Server marcinbudny.blogspot.com/2011/10/… Ich bin mir nicht sicher, wie der Server läuft.
Jon
1
Vergessen Sie nicht, dass socket.io viel mehr kann als nur Websockets, es greift auch auf lange Abfragen usw. zurück
mtsr
1
@MarcGravell Ein Jahr danach. Was bevorzugen Sie (nach dem Erleben von vs2012 signalR und node)?
Royi Namir
2
@ Royi Ich werde das indirekt beantworten: Wir sind immer noch unser benutzerdefinierter Socket-Server und planen, den Code als F / OSS zu veröffentlichen
Marc Gravell

Antworten:

77

SignalR ist insofern wie Socket.IO, als es Transportverhandlungen / Fallback unterstützt. Es ist ein Framework und kein Server, daher müssen Sie es auf einem Server hosten. Wir haben Hosts für ASP.NET, OWIN (z. B. Kayak) und Self-Host, sodass Sie es problemlos in Ihrem eigenen Prozess ausführen können, z. B. einen Windows-Dienst.

SignalR unterstützt Clients für Browser (JS), .NET, Windows Phone 7 und Silverlight. Es gibt auch Kunden für Dinge wie iOS, Mono Touch usw.

SignalR bietet Ihnen eine API auf einer viel höheren Ebene als Raw-Sockets. Dies ist der große Vorteil, der es Ihnen ermöglicht, Dinge wie "RPC" vom Server zu Clients auf Broadcast- (oder gezielte) Weise auszuführen.

Damian Edwards
quelle
21

Andere Implikationen

Ich habe beide Technologien verwendet und arbeite auf beiden Seiten der .NET / Node-Stacks.

  1. Obwohl ich heutzutage die Knotenseite bevorzuge, ist SignalR die offensichtliche Wahl, wenn Sie nur in .NET arbeiten. Umgekehrt, wenn Sie alle Ihre Projekte in Node erstellen, würde ich mit socket.io oder gehen sockjs gehen . Wenn Ihr Umfang so eng ist, dass Sie sich keine Gedanken über Fallbacks und dergleichen machen müssen, würde ich empfehlen, das ws- Modul zu testen, da es einfacher und leichter für Ihre Abhängigkeiten ist. In der Vergangenheit war socket.io unter Windows aufgrund von Installationsproblemen mit Node-Gyp ein Problem, bei dem native Abhängigkeiten nicht installiert werden konnten ( Node-Gyp erfordert viele Konfigurationsschritte, die je nach Windows-Version stark variieren, jedoch für C ++ erforderlich sind native gebaute Module). UPDATE Dieses Windows-Bit ist dank nicht mehr so ​​relevantWindows-Build-Tools .
  2. Wenn Sie einen Load Balancer haben und SignalR ausführen möchten, müssen Sie SQL oder Redis als Backplane einrichten, um den Load Balancer zu umgehen. Sie werden ähnliche Probleme auf der Seite von socket.io haben und es gibt [mehrere unterstützte Methoden] [1] (von denen 1 auch redis ist).

Update - JQuery-Informationen wurden entfernt, da sie nicht mehr anwendbar sind

Kammerherr
quelle
3
Tatsächlich unterstützt die SignalR JavaScript-Clientbibliothek 2.2.0 (veröffentlicht im Januar 2015) jede Version von jQuery> = 1.6.4. Das heißt, Sie müssen keine Versionen von jQuery duplizieren (was sowieso kaputt gehen würde). Ich habe gerade überprüft, ob dies bei einer Beispiel-Chat-Anwendung der Fall ist, die in Chrome, IE und Firefox mit dem SignalR JavaScript-Client Version 2.2.0 und jQuery 2.1.4 ausgeführt wird. Es ist auch sehr wahrscheinlich, dass die meisten Browser eine kompatible Kopie von jQuery zwischengespeichert haben.
dmcquiggin
1
Für diejenigen, die sich dessen nicht bewusst sind, ist SignalR jetzt ein von Azure bereitgestellter Dienst, der den Skalierbarkeitsaspekt für Sie verwaltet. Sie haben auch eine kostenlose Stufe zum Spielen.
Shayan C
15

Die Entwicklung eines skalierbaren / thread-sicheren TCP-Servers ist möglicherweise keine leichte Aufgabe. Auf der anderen Seite gibt es im Internet sehr nette Ressourcen, um eigene zu gründen. Wenn Sie zum Beispiel nur nach netten Open-Source-WebSocket-Projekten suchen, wäre mein Rat;

Alchemieprojekt : Open Source C # WebSocket Library

Fleck-Projekt : Open Source C # WebSocket Library

SignalR könnte nett sein, benötigt jedoch Windows Server 8 / IIS 8, um die WebSocket-Funktion bereitzustellen.

Auf der kommerziellen Produktseite empfehle ich PokeIn WebSocket und Reverse Ajax Library, insbesondere angesichts der Tatsache, dass die Websocket-Funktion nicht in allen Browsern verfügbar ist. Ab Version 2.0 ist der WebSocket-Server integriert. Details finden Sie hier

Zuuum
quelle
Wie bereits erwähnt, hat Signalr einen Transport-Fallback. Wenn Web-Sockets (auf Server oder Client) nicht unterstützt werden, fällt dies auf einen anderen Transporttyp und so weiter.
psulek
2
Es ist nicht SignalR, das Windows Server 2012 benötigt, es ist also nicht seine Schuld.
Alisson