我想从流中读取信息,例如我尝试连接到munin-node,发送请求并读取远程socket(munin)将为我发送的所有数据
$stream = stream_socket_client('tcp://127.0.0.1:4949', $errorNumber, $errorMessage);
stream_socket_sendto($stream, "list\n");
$content = stream_get_contents($stream, -1);
print_r($content);
但是,stream_get_contents读取数据....并被阻止!只有在流超时结束后代码才会继续工作。 任何机构都知道我需要更改代码才能从服务器获得无阻塞的答案吗?
答案 0 :(得分:0)
您应该在stream_get_content的第二个arg中指定您要等待的字节数。但也许你不知道。至少,在这里,你知道你会得到两条线。所以你可以使用这个工作,调用fgets两次:
$fp = fsockopen("localhost", 4949, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
fwrite($fp, "list\n");
echo fgets($fp, 1024);
echo fgets($fp, 1024);
fclose($fp);
}
如果你想按自己的方式去做,你应该看看socket_set_blocking(0)。和/或使用stream_get_meta_data()来了解您从流中获得的字节数