Wie checke ich in PHP ein, wenn ein Socket noch verbunden ist, wenn ich den Socket-Handler nicht habe?

8

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.

    
ahmed 13.04.2016, 20:47
quelle

3 Antworten

4

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:

%Vor%

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.

    
Ruslan Osmanov 25.04.2016 18:29
quelle
1

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%     
Peter Darmis 22.04.2016 23:13
quelle
1

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:

%Vor%

Das Objekt Connection speichert die Socket-Ressource in einer öffentlichen Eigenschaft $connection :

%Vor%     
Kaii 28.04.2016 21:55
quelle

Tags und Links