客户端循环读socket 数据时 耗时很长,谁能解答一下

chinablue

使用下面的代码读取socket 返回的数据,循环了三次,最后一次fgets 的结果 返回false, 这次特别慢,不知道是什么原因?

while (!feof($socket)) {
    echo microtime(true) . "\n";
    $buffer = fgets($socket);
    var_dump($buffer);
    echo microtime(true)  . "\n\n";
    if ($buffer === '' || $buffer === false) {
        break;
    }
    $recvBuffer .= $buffer;
}
3069 3 0
3个回答

walkor 打赏

最后一次应该是没有数据可读了,一直阻塞最后超时了,返回false

chinablue

那怎么处理?

  • 暂无评论
walkor 打赏

定义一个协议规则,
例如第一行返回一个数字,表示一个有几行数据,
得到还有几行数据后,在循环那么多次去fgets,
不要没数据了,客户端还在那里傻等

协议数据类似

5
aqweqrwertewt
sadfsadfsadfsdf
asdfsadfasdfsfd
asdfsafffwserere
asfaaaaaaaaaaa

  • 暂无评论
年代过于久远,无法发表回答
×
🔝