小编gb0*_*056的帖子

php stream_get_contents在流的末尾挂起

问题结束时的解决方案

我正在编写一个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)

php sockets stream php-socket php-stream-wrappers

7
推荐指数
1
解决办法
8267
查看次数

标签 统计

php ×1

php-socket ×1

php-stream-wrappers ×1

sockets ×1

stream ×1