Ich verwende ein Composer-Paket owlycode / streaming-bird , um twitter stream API . Die Stream-API öffnet einen Socket zwischen Ihrer App und Twitter, um Tweets mit einem bestimmten Keyword zu erhalten. In meinem Fall ist das Schlüsselwort "Hallo".
Hier ist der Code, der owlycode / streaming-bird-Paket verwendet:
%Vor%Mein Problem ist, wenn diese Verbindung versehentlich geschlossen wird, kann ich das nicht wissen. Ich kann also nicht wieder mit Twitter verbinden.
Gibt es irgendetwas in PHP, das offene Sockets basierend auf ihrem Domain-Namen durchsucht?
Vielleicht etwas wie
%Vor%?
Hinweis: Ich kann socket_get_status nicht verwenden, weil ich nicht habe die Socket-Variable.
Es gibt keine Möglichkeit, den Socket-Status zu überprüfen, wenn Sie keinen Zugriff auf den Socket haben.
Wenn Sie nach einer Problemumgehung suchen, ohne den StreamBird-Code zu berühren, können Sie eine Klasse basierend auf \OwlyCode\StreamingBird
erstellen und dann ihre connect
-Methode implementieren:
Sie können auch eine Klasse basierend auf \OwlyCode\StreamingBird
erstellen, die ebenfalls Zugriff auf den Stream hat. Allerdings müssen Sie diese Streams im Auge behalten, da es sich um eine Factory-Methode handelt.
Sieht so aus, als könnten Sie socket_get_status schließlich verwenden, wenn Sie nur eine kleine Erweiterung im Paket selbst vornehmen.
Diese beiden Funktionen befinden sich in der streamreader-Klasse. Der Socket-Handler ist hier verfügbar.
%Vor%In der Verbindungsklasse steht der Socket-Handler zur Verfügung, so dass Sie den Socket-Status abrufen können, wenn Sie versuchen, Daten aus dem Socket zu lesen. Unten ist eine leicht modifizierte Lesefunktion
%Vor% Wenn Sie sich die Implementierung der Klasse StreamingBird
ansehen, sehen Sie sich kann die streamreader-Instanz selbst erstellen, mit der vollen Kontrolle über die Verbindung:
Das Objekt Connection
speichert die Socket-Ressource in einer öffentlichen Eigenschaft $connection
: