it-swarm.com.de

Unterschiede zwischen TCP Sockets und Web-Sockets noch einmal

Beim Versuch, die Unterschiede zwischen TCP Socket und Websocket so gut wie möglich zu verstehen, habe ich in diesen Fragen bereits viele nützliche Informationen gefunden:

und so weiter...

Bei meinen Nachforschungen habe ich diesen Satz am wikipedia durchgesehen:

Websocket unterscheidet sich von TCP darin, dass ein Nachrichtenstrom anstelle eines Bytestroms aktiviert wird

Ich bin mir nicht ganz sicher, was es genau bedeutet. Was sind deine Interpretationen?

131
PierrOz

Wenn Sie Bytes aus einem Puffer mit einem normalen TCP Socket senden, gibt die Sendefunktion die Anzahl der Bytes des Puffers zurück, die gesendet wurden. Wenn es sich um einen nicht blockierenden Socket oder einen nicht blockierenden Socket handelt send, dann ist die Anzahl der gesendeten Bytes möglicherweise kleiner als die Größe des Puffers.Wenn es sich um einen blockierenden Socket oder um einen blockierenden Send handelt, stimmt die zurückgegebene Nummer mit der Größe des Puffers überein, der Aufruf kann jedoch blockieren an die send-Methode übergeben wird, wird immer entweder als ganze "Nachricht" oder gar nicht gesendet. Außerdem blockieren Browser-WebSocket-Implementierungen den Sendeaufruf nicht.

Aber es gibt wichtigere Unterschiede auf der Empfangsseite. Wenn der Empfänger ein recv (oder read) auf einem TCP) - Socket ausführt, gibt es keine Garantie dafür, dass die Anzahl der zurückgegebenen Bytes einem einzelnen Send (oder Write) auf der Senderseite entspricht Es kann weniger (oder null) und sogar mehr sein (in diesem Fall werden Bytes von mehreren Sende-/Schreibvorgängen empfangen.) Bei WebSockets erfolgt der Empfang einer Nachricht ereignisgesteuert (Sie registrieren im Allgemeinen einen Nachrichtenhandler) Routine), und die Daten im Ereignis sind immer die gesamte Nachricht, die die andere Seite gesendet hat.

Beachten Sie, dass Sie mit TCP Sockets eine nachrichtenbasierte Kommunikation durchführen können. Sie benötigen jedoch eine zusätzliche Ebene/Kapselung, die den Nachrichten Rahmen-/Nachrichtenbegrenzungsdaten hinzufügt, damit die ursprünglichen Nachrichten neu zusammengestellt werden können Tatsächlich baut WebSockets auf normalen TCP Sockets auf und verwendet Frame-Header, die die Größe jedes Frames enthalten und angeben, welche Frames Teil einer Nachricht sind. Die WebSocket-API wird neu zusammengestellt Die TCP Datenblöcke in Rahmen, die zu Nachrichten zusammengefasst werden, bevor der Nachrichtenereignishandler einmal pro Nachricht aufgerufen wird.

183
kanaka

WebSocket ist im Grunde ein nachrichtenorientiertes Anwendungsprotokoll (in Bezug auf den ISO/OSI-Netzwerkstapel), das TCP als Transportschicht verwendet.

Die Idee hinter dem WebSocket-Protokoll besteht darin, die hergestellte TCP Verbindung zwischen einem Client und einem Server erneut zu verwenden. Nach dem HTTP-Handshake beginnen Client und Server mit dem Sprechen des WebSocket-Protokolls, indem sie WebSocket-Umschläge austauschen. HTTP-Handshake wird verwendet, um alle Barrieren (z. B. Firewalls) zwischen einem Client und einem Server zu überwinden, die bestimmte Dienste anbieten (normalerweise kann jeder von überall auf Port 80 zugreifen). Client und Server können jederzeit über die gleiche TCP -Verbindung (die niemals freigegeben wird) auf HTTP umschalten.

Hinter den Kulissen WebSocket erstellt die TCP Frames in konsistenten Umschlägen/Nachrichten neu. Der Vollduplex-Kanal wird vom Server verwendet, um Aktualisierungen asynchron an den Client zu senden: Der Kanal ist offen und der Client kann alle zu verwaltenden Futures/Rückrufe/Versprechen aufrufen Beliebige asynchrone WebSocket-empfangene Nachricht.

Einfach ausgedrückt ist WebSocket ein Protokoll auf hoher Ebene (wie HTTP selbst), das auf TCP (zuverlässige Transportschicht, pro Frame) basiert und die Erstellung einer effektiven Echtzeitanwendung mit JS-Clients (zuvor) ermöglicht Kometen- und Long-Polling-Techniken wurden verwendet, um Updates abzurufen vom Server, bevor WebSockets implementiert wurden. Siehe Stackoverflow post: nterschiede zwischen Websockets und langem Polling für rundenbasierte Spieleserver ).

120
Paolo Maresca