问题结束时的解决方案
我正在编写一个PHP应用程序,它将消息发送到服务器,然后在使用时读回响应stream_get_contents.我以相同的方式在Android应用程序中与同一服务器通信.Android应用程序工作正常并快速响应,但是当从服务器读回响应时PHP挂起.
在下面的代码示例中,我设置了一个5字节的微小缓冲区大小来测试理论.如果我删除它的缓冲区大小,它会挂起,但是在5字节大小的情况下,它只会在最后一次循环中挂起:
stream_set_timeout($this->socket, 10); //10 seconds read timeout
while (!feof($this->socket)) {
$breakOut = false;
echo 'Reading response'.time().'<br/>';
$data = stream_get_contents($this->socket, 5);
echo 'Read response'.time().'<br/>';
if ($data === false) {
$this->latestErrStr = "Timed out waiting for a response.";
return false;
} else {
$index = strpos($data, chr(3));
if ($index !== FALSE){
$breakOut = true;
$data = substr($data, 0, $index);
}
$response .= $data;
}
$stream_meta_data = stream_get_meta_data($this->socket);
//If we have no EOF marker then break if there are …Run Code Online (Sandbox Code Playgroud)