Heim > Artikel > PHP-Framework > Swooles Onreceive wird nicht ausgelöst
onReceive
Diese Funktion wird zurückgerufen, wenn Daten empfangen werden, was im Arbeitsprozess geschieht. Funktionsprototyp: (Empfohlenes Lernen: Swoole-Video-Tutorial)
function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data);
$server, Serverobjekt
$fd, die eindeutige Kennung der TCP-Client-Verbindung
$reactor_id, die Reactor-Thread-ID, in der sich die TCP-Verbindung befindet
$data, der empfangene Dateninhalt kann Text oder Binärinhalt sein
Über $fd und $ Detaillierte Erklärung von „reaktor_id“
Die Option „Automatisches Protokoll“ ist nicht aktiviert. Die maximale Datenmenge, die onReceive gleichzeitig empfängt, beträgt 64 KB.
Die Option „Automatische Protokollverarbeitung“ ist aktiviert, onReceive empfängt das vollständige Datenpaket, das Maximum überschreitet nicht package_max_length
Unterstützt das Binärformat, $data kann Binärdaten sein
Verwenden Sie das von der unteren Ebene bereitgestellte Protokoll open_eof_check/open_length_check/open_http_protocol um die Integrität des Datenpakets sicherzustellen
Verwenden Sie nicht die zugrunde liegende Protokollverarbeitung, analysieren Sie die Daten und führen Sie die Datenpakete nach onReceive selbst im PHP-Code zusammen/aufteilen.
Zum Beispiel: Sie können dem Code ein $buffer = array() hinzufügen und $fd als Schlüssel zum Speichern von Kontextdaten verwenden. Jedes Mal, wenn Daten empfangen werden, wird ein String-Splicing durchgeführt, $buffer[$fd] .= $data, und dann wird beurteilt, ob der $buffer[$fd]-String ein vollständiges Datenpaket ist.
Standardmäßig wird derselbe fd demselben Worker zugewiesen, sodass die Daten zusammengefügt werden können. Bei Verwendung von „dispatch_mode = 3“.
Das Anfordern von Daten erfolgt präventiv und von demselben FD gesendete Daten können verschiedenen Prozessen zugewiesen werden. Daher kann die oben genannte Paket-Splicing-Methode nicht verwendet werden
Bei Packet-Sticking-Problemen wie dem SMTP-Protokoll kann der Client zwei Anweisungen gleichzeitig erteilen. Es kann sein, dass es auf einmal auf dem Server empfangen wird. In diesem Fall muss die Anwendungsschicht es selbst entpacken. SMTP wird über rn untervergeben, daher ist im Geschäftscode explosionsartig("rn", $data) erforderlich, um die Datenpakete aufzuteilen.
Wenn es sich um einen Request-Response-Dienst handelt, muss nicht über eine Aufteilung der Daten nachgedacht werden. Der Grund dafür ist, dass der Client, nachdem er eine Anfrage initiiert hat, warten muss, bis der Server die Antwortdaten der aktuellen Anfrage zurückgibt, bevor er eine zweite Anfrage initiiert. Es werden nicht zwei Anfragen gleichzeitig gesendet
Das obige ist der detaillierte Inhalt vonSwooles Onreceive wird nicht ausgelöst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!