Nicht blockierende Sockets: Sind Nachrichten in der Warteschlange?

8

Nach meinem Verständnis ist es möglich, ein nicht blockierendes Netzwerk Socket in PHP 5.x.

Aber was passiert, wenn ein Skript mehrere lange Nachrichten mit dem gleichen nicht blockierenden Socket wie folgt sendet:

%Vor%

Sind diese Nachrichten in der Warteschlange (auf der Sender / Empfänger-Seite?) oder ist es möglich, dass der Empfänger Teile verschiedener Nachrichten erhält, weil sie "parallel" gesendet haben?

Zum Beispiel: Es ist möglich, dass der Empfänger 10 Bytes von $ string1 erhält, dann 30 Bytes von $ string2, dann weitere 25 Bytes von $ string1 ... und so weiter ....

    
Mike 16.03.2012, 15:09
quelle

1 Antwort

6

Das hängt vom Protokoll ab, das der Socket verwendet. Siehe socket_create für die möglichen Socket-Typen. Die Haupttypen sind UDP und TCP:

  

udp Das User Datagram Protocol ist ein verbindungsloses, unzuverlässiges Protokoll mit festen Satzlängen. Aufgrund dieser Aspekte erfordert UDP einen minimalen Protokollaufwand.

     

tcp Das Transmission Control Protocol ist ein zuverlässiges, verbindungsbasiertes, streamorientiertes Vollduplexprotokoll. TCP garantiert, dass alle Datenpakete in der Reihenfolge empfangen werden, in der sie gesendet wurden. Wenn während der Kommunikation ein Paket verloren geht, überträgt TCP das Paket automatisch erneut, bis der Ziel-Host das Paket bestätigt. Aus Zuverlässigkeits- und Leistungsgründen entscheidet die TCP-Implementierung selbst über die geeigneten Oktettgrenzen der darunterliegenden Datagramm-Kommunikationsschicht. Daher müssen TCP-Anwendungen die Möglichkeit der teilweisen Übertragung von Daten ermöglichen.

Um Ihre Frage direkt zu beantworten, garantieren TCP-Sockets die Lieferung in der richtigen Reihenfolge, während UDP-Sockets dies nicht tun.

    
Justin Ethier 16.03.2012, 15:35
quelle

Tags und Links