PHP-限制套接字连接周期

PHP-限制套接字连接周期,php,linux,sockets,Php,Linux,Sockets,我正在从一个以未知间隔泵送数据的套接字获取数据。几分钟(甚至几小时)内可能什么都没有,然后成千上万的行可以排队等待读取 因为我不知道会发生什么,所以我希望构建一个能连接2-5秒的东西,不管它能连接多少,不管在服务器端排队多少 这就是我现在拥有的 <?php set_time_limit(2); ini_set('max_input_time', 2); $timeout = 3; $host = 'data.host.com'; $port

我正在从一个以未知间隔泵送数据的套接字获取数据。几分钟(甚至几小时)内可能什么都没有,然后成千上万的行可以排队等待读取

因为我不知道会发生什么,所以我希望构建一个能连接2-5秒的东西,不管它能连接多少,不管在服务器端排队多少

这就是我现在拥有的

<?php
set_time_limit(2);
ini_set('max_input_time', 2);

$timeout       = 3;
$host          = 'data.host.com';
$port          = 6543;
$fp            = fsockopen($host, $port, $errno, $errstr, $timeout);
stream_set_timeout($fp, 2);
if( !$fp ){
  echo "Connection to '$host' failed.\n$errstr ($errno)\n";
  exit;
}

while( !feof($fp) ){
  $xml = trim(fgets($fp));
  if(empty($xml)) continue;
  echo "XML=$xml\n";
}

echo "DONE\n";

function shutdown(){
  echo "SHUTDOWN!\n";
}

register_shutdown_function('shutdown');

我相信这是一个mysql连接,如果是,请使用默认端口。限制套接字连接是不可取的,除非您可以将所有事务存储在临时数据库中,并在分配的时间将其推送到其他位置。

我认为这是一个mysql连接,如果是,请使用默认端口。限制套接字连接是不可取的,除非您可以将所有事务存储在临时数据库中,并在分配的时间将其推送到其他位置。

这可能不是最好/正确的方法,但它应该可以工作(未经测试)


这可能不是最好的/正确的方法,但应该有效(未经测试)

    $startTime = time();
    $executionTime = 180; //180 Seconds - 2 Minutes

    while( !feof($fp) ){
        if ((time() - $startTime) > $executionTime) {
            //If time has been longer than the execution time, break
            //out of loop
            break;
        }
        $xml = trim(fgets($fp));
        if(empty($xml)) continue;
        echo "XML=$xml\n";
    }
$start_time = time();
while( !feof($fp) ){
  $xml = trim(fgets($fp));
  if(empty($xml)) continue;
  echo "XML=$xml\n";
  if ( time() - $star_time > 320 ) break;
}