【发布时间】:2023-04-02 12:04:01
【问题描述】:
我正在从一个以未知间隔抽取数据的套接字获取数据。几分钟(甚至几小时)可能什么都没有,然后可以排队等待数万行。
因为我不知道会发生什么,所以我希望构建一个能连接 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');
然而,这永远不会结束。 while 循环似乎与人们预期的一样无限(断章取义)。如何输入和捕获一些退出/中断/杀死?
【问题讨论】: