2016-07-20 16 views
0

Ich bin dabei, eine Anwendung zu erstellen, die erfordert, dass Clients untereinander (ähnlich dem Chat) Nachrichten über einen Server austauschen.Gibt es eine TCP-Socket-Bibliothek/ein TCP-Socket-Protokoll, das Nachrichtenrahmen unterstützt und in JS & C# unterstützt wird?

Ich möchte den Server in JavaScript mit Node JS schreiben, die Client-Anwendungen sind in C# .NET geschrieben.

Ich habe für eine Weile recherchiert und Socket.IO wegen des Mangels an C# -Support verworfen und weil ich etwas eher Low-Level und flexibel/anpassbar suche.

Ich bin einmal eine Anwendung sehr ähnlich geschrieben, die das eingebaute NodeJS 'net' Modul als Server und C# TCPClient Client-Seite verwendet, es funktioniert, aber es verwendet einen Stream und ich muss die Länge der Nachricht voranstellen vor jeder Nachricht.

Ich bin auf der Suche nach etwas mehr redundante, die Message-Framing out-of-the-Box hat und von den Sprachen unterstützt wird, die ich benutze.

Ich habe das 'ws' (WebSocket) npm Modul gefunden, das wie ein vielversprechender Kandidat erscheint, besonders da es gut mit der C# Socket Klasse (die auch der zugrundeliegende Socket der TCPistener und TCPClient Klassen ist) übereinstimmt) aber für das Leben von mir kann ich nicht herausfinden, ob ich immer noch einen Socket Stream erwarten muss oder einfach einen Event-Handler für neue Nachrichtenereignisse setzen muss.

Ich bin auf der Suche nach etwas, das wirklich einfach zu implementieren ist und wird für jede Nachricht, die ich erhalte, damit ich damit umgehen kann, unabhängig von der Größe der Nachricht oder Puffer (ich plane, durchschnittliche Nachrichten ein Megabyte an Größe senden. ..), ich möchte nie mit dem Puffer umgehen, und natürlich sollte es in den oben genannten Sprachen gut unterstützt werden.

+0

WebSockets mit Nachrichten funktioniert, nicht wahr muss der Größe vorangestellt werden, Sie werden nur an das Nachrichtenereignis angehängt und es wird vollständig empfangen. – Gusman

+0

@Gusman so serverseitig benutze ich 'ws'? Wie lautet der Name des Pakets/der Klasse, die clientseitig verwendet werden soll (mit C#)? – effy

+0

Ich benutze Websocket-sharp, weil es portabel ist und perfekt mit mono/linux funktioniert, aber wenn dein Ziel nur Windows ist, kannst du die integrierten websockets verwenden: https://msdn.microsoft.com/es-es/library/system.net .websockets.websocket (v = vs.110) .aspx – Gusman

Antwort

1

WebSockets funktionieren bereits mit Nachrichten, Sie müssen die Größe nicht voranstellen, sondern nur das Nachrichtenereignis haken und es wird vollständig empfangen.

ich persönlich websocket scharf verwenden, da es tragbar ist und funktioniert perfekt unter Mono/Linux, aber wenn Ihr Ziel Windows ist nur yo kann die integrierte .net WebSockets verwenden: https://msdn.microsoft.com/es-es/library/system.net.websockets.websocket(v=vs.110).aspx

+0

Meine letzte Implementierung wird Streaming-Bilder mit Nachrichten bis zu 1 MB, hatte ich Probleme bei der Verwendung eines Stream-Protokoll, wo Nachricht nur teilweise in den Puffer angekommen und ich musste warten, bis die vollständige Nachricht angekommen war, konnte ich nur warten, wenn ich wusste wie viele Bytes fehlten, um zu wissen, dass ich die Nachrichtenlänge vorher brauchte. – effy

+0

Wenn Sie sagen, dass unabhängig von der Größe mit WebSockets sicherstellen, dass die Nachricht vollständig ankommt, dann habe ich kein Problem damit, ich habe auch online gelesen, dass WebSockets seine eigene Nachricht Framing, um sicherzustellen, dass. – effy

+1

Ja, intern verwendet WebSockets seine eigene Framing-Kontrolle, so dass sichergestellt ist, dass eine Nachricht ankommt, wenn sie vollständig ist. – Gusman