2012-04-02 2 views
0

Ich muss eine Server + Client-Bibliothek erstellen, um Daten von meinem TimeSeriesDb database anzufordern, und es gibt viele verschiedene Socket und Websocket-Bibliotheken für .NET, plus ich könnte meine eigene Implementierung tun. Daher - kann wirklich beraten, wie Sie vorgehen.Erstellen von binären Socket-Server: benutzerdefinierte vs SignalR vs XSockets vs WebSocket4Net?

Ich fand SuperSocket und WebSocket4net, die darauf basiert, XSockets, und SignalR. Es gibt auch Microsoft's WebSocket Implementierung, die mit .NET 4.5 kommt, die andere veraltet machen könnte.

Noch WebSockets sind optimiert für das Web & Echtzeit-Updates, anstatt binäre Anfrage Antworten, die ich brauche, da der Client auch eine .NET-Bibliothek ist, die nicht im Browser ist.

Details:

Sowohl die db Anfrage und Antwort sind binär:

Auftraggeber: Daten für gegebenes params Erhalten (einen Block von Binärdaten)
Server: Starten ein Sende Datenstrom (als Binärblöcke), in dem der Client die Übertragung jederzeit stoppen kann.

Ich bin auf .NET 4 ausgerichtet, so dass TPL-Aufgaben mit Async-Funktionen profitieren könnten.

Gut zu haben: Stream-Multiplexing, wo mehr als eine Anfrage/Antwort über die gleiche Verbindung gehen könnte (ein Block für jede Antwort der Reihe nach). Ich bin mir nicht sicher, ob dies erforderlich ist oder ob mehrere Verbindungen besser funktionieren würden.

Antwort

2

WebSockets haben binäre Daten mit Opcode von% x2 basierend auf dem offiziellen Dokument RFC6455.

Auch WebSockets implementiert Framing für jede Datennachricht, die es sendet. Für kleine Pakete ist der Aufwand für den Verkehr angemessen.

Wenn es keine Pläne für zukünftige Unterstützung der Verbindung zu Ihrer Datenbank von Front-End gibt. Dann kann ich nicht sehen, warum Sie WebSockets verwenden würden. Es ist komplizierter als reine Binärkommunikation, und Sie müssen eine fertige Lösung für WebSockets implementieren oder verwenden. Ich glaube, es ist sehr effizient für den Speicher und die Verarbeitung von Paketen, um reine TCP-Sockets mit binärer Serialisierung zu verwenden. Ich würde empfehlen, einen Blick in Google Protocol Buffer zu werfen, und überprüfen Sie .Net implementation.

Das wird Ihnen ermöglichen, Ihre Nachrichtendaten auf angenehme Weise zu packen, und wird die Fähigkeit hinzufügen, in Zukunft mit anderen Anwendungen zu kommunizieren, die dieses Protokoll ebenfalls implementieren. Auch wenn Sie Data Protocol in die Datenbank erstellen, wäre es viel besser, einen Handshake mit der Auswahl von Datenprotokollen zu erstellen, und dann verwendet der Server eine der verfügbaren Implementierungen, über die der Client kommunizieren möchte.

Möglicherweise möchten Sie auch die integrierte Serialisierungsfunktion in .Net verwenden.