php - 如果套接字仍然连接,如果我没有套接字处理程序,如何检查 PHP?

标签 php linux sockets twitter

我正在使用 Composer 包 owlycode/streaming-bird调用twitter stream API .流 API 在您的应用程序和推特之间打开一个套接字,以接收具有指定关键字的推文。在我的例子中,关键字是“你好”。

这是使用 owlycode/streaming-bird 包的代码:

 <?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";
        });
  ?>

我的问题是当这个连接被错误关闭时,我无法知道。所以我无法再次与 Twitter 重新连接。

PHP 中有没有根据域名搜索打开的套接字的东西?

也许是这样的

  check_if_socket_open('https://stream.twitter.com/1.1/statuses/firehose.json')

?

注意:我不能使用 socket_get_status ,因为我没有套接字变量。

最佳答案

如果您无权访问套接字,则无法检查套接字状态。

如果您正在寻找一种不涉及 StreamBird 代码的解决方法,那么您可以创建一个基于 \OwlyCode\StreamingBird 的类,然后实现它的 connect 方法:

<?php
class MyStreamReader extends \OwlyCode\StreamingBird
{
  protected $stream;

  protected function connect($timeout = 5, $attempts = 10)
  {
    return $this->stream = parent::connect($timeout, $attempts);
  }

  protected function isConnected() 
  {
    return $this->stream && stream_get_meta_data($this->stream)['eof'];
  }
}


class MyStreamingBird extends \OwlyCode\StreamingBird
{
  public function createStreamReader($method)
  {
    $oauth = new \OwlyCode\StreamingBird\Oauth($this->consumerKey,
      $this->consumerSecret, $this->oauthToken, $this->oauthSecret);
    return new MyStreamReader(new \OwlyCode\StreamingBird\Connection(), $oauth, $method);
  }
}


$bird = new MyStreamingBird($consumerKey, $consumerSecret, $oauthToken, $oauthSecret);
$reader = $bird->createStreamReader(StreamReader::METHOD_FILTER); // ...

$reader->isConnected();

您还可以创建一个基于 \OwlyCode\StreamingBird 的类,它也可以访问流。但是,您必须跟踪这些流,因为它是一种工厂方法。

关于php - 如果套接字仍然连接,如果我没有套接字处理程序,如何检查 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609284/

相关文章:

php - 字段列表中的未知列(PHP、HTML、SQLyog)

php - Ajax 保存到服务器的功能无法正常工作

c++ - 为客户端/服务器编译项目 [链接器错误] undefined reference

sockets - SMTP 套接字 -- Authentocation & SSLSocket

sockets - 通过 UDP 套接字的 Google 公共(public) DNS 查询

php - 使用 XMLRPC 修改类别时在 Varien_File_Uploader 中引发异常

php - 从字符串中提取参数

linux - 重定向中的算术表达式

linux - 在 bash 中计算文件中的单词出现次数

linux - Linux 中的固件和驱动程序