Ich verwende ein Composer-Paket owlycode/streaming-bird, um twitter stream API zu rufen. 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".Wie PHP einchecken, wenn ein Socket immer noch verbunden ist, wenn ich nicht den Socket-Handler habe?
Hier ist der Code mit owlycode/Streaming-Vogel-Paket:
<?PHP
$oauthToken = '';
$oauthSecret = '';
$consumerKey = '';
$consumerSecret = '';
$bird = new StreamingBird($consumerKey, $consumerSecret, $oauthToken, $oauthSecret);
$bird
->createStreamReader(StreamReader::METHOD_FILTER)
->setTrack(['hello']) // Fetch every tweet containing one of the following words
->consume(function ($tweet) { // Now we provide a callback to execute on every received tweet.
echo '------------------------' . "\n";
echo $tweet['text'] . "\n";
});
?>
Mein Problem ist, wenn diese Verbindung durch Fehler geschlossen ist, ich bin nicht in der Lage, das wissen. Ich kann also nicht wieder mit Twitter verbinden.
Gibt es irgendetwas in PHP, das offene Sockets basierend auf ihrem Domain-Namen sucht?
Vielleicht so etwas wie
check_if_socket_open('https://stream.twitter.com/1.1/statuses/firehose.json')
?
Hinweis: Ich kann socket_get_status nicht verwenden, da ich die Socket-Variable nicht habe.
Es [mir sieht] (https://github.com/OwlyCode/StreamingBird/blob/master/src/StreamReader.php#L80) als würde es den Socket immer wieder verbinden, wenn die Verbindung verloren ist. – miken32
Wenn man sich die Inline-Dokumentation anschaut, sieht es so aus, als wäre @ miken32 korrekt. Ich denke, das Problem ist die Zeit, die man braucht, um einen Verbindungsverlust zu erkennen ... zum Beispiel: wenn das Timeout standardmäßig 1 Minute beträgt ... dann hast du es 1 Minute des Streams verloren – edhurtig
Obwohl es eine schlechte Lösung ist ... es lohnt sich aus anderen Gründen in stream_set_timeout ($ stream, $ Sekunden) zu suchen. http://php.net/manual/en/function.stream-set-timeout.php – edhurtig