2016-08-08 6 views
1

Ich erstelle eine Web-Buchse Verbindung mit Ratsche php. Ich habe einen Client verbunden und dann eine Abfrage ausgeführt (es dauert etwa 20 Sekunden, um die Abfrage auszuführen), während ich versuche, einen anderen Client zu verbinden, und sehe, dass die Web-Socket-Verbindung im Wartestatus ist (versuche immer noch das Protokoll zu wechseln) . Später, als die Antwort für die erste Anfrage kam, sehe ich, dass der Server 'neue Verbindung hergestellt' ausgibt (habe diese Anweisung in meiner onOpen-Funktion behalten).ratsche ereignis schleife wird blockiert

Wenn reactive php nach dem gleichen Prinzip wie NodeJs funktioniert, sollte die Verbindung auch dann nicht hergestellt werden, wenn die Verarbeitung viel Zeit in Anspruch nimmt?

Warum wird die Web-Socket-Verbindung wegen des späteren Ausführungsteils blockiert?

Antwort

0

Nun, das ist nicht ganz korrekt. Ratchet PHP und NodeJS sind keine Erbsen. Sie funktionieren nicht genau so.

Was Ratchet PHP tut, verwendet nicht blockierende I/O-Streams. Dies ist alles, von TCP/IP-Verbindungen zu Ihrem WS-Server, zu anderen IO-Verbindungen, die durch das Framework ermöglicht werden.

Sie sättigten jedoch, Sie führen eine Abfrage, die ich vermutete, war eine Datenbankabfrage? Wenn Sie die Verbindung zu dieser Datenbank selbst hergestellt haben und nicht über die nicht blockierende IO-Stream-Funktion von Ratchet, erfolgt die Datenbankabfrage über einen blockierenden TCP/UNIX-Socket. Was bedeutet, PHP muss sitzen dort und warten auf Ihre dbms auf die Abfrage reagieren, bevor es weitere Code ausführen kann. Daher kann Ihr WebSocket-Server in der Zwischenzeit nicht auf andere Anforderungen reagieren, keine anderen Verbindungen akzeptieren oder sogar eine andere Codezeile ausführen, bis das Datenbanksystem antwortet, da sich der TCP-Socket in einem WAIT-Zustand befindet. Es sitzt nur herum und wartet darauf, dass Daten in die Pipe kommen.

+1

Wie verwenden Sie die nicht blockierende IO-Stream-Funktion statt die Datenbankverbindung selbst herzustellen? – TheStoryCoder

Verwandte Themen