如果我fwrite()
没有fread()
,那么一切都会在另一端收到。
但是,如果我fwrite()
然后fread(
),fwrite似乎永远不会发送到管道。好像fread()
会导致fwrite挂起,这意味着fwrite永远不会向下发送管道,因此服务器无法获取它并且不会写入响应。这导致两端都挂起。
即使我fflush()
...
所以我的服务器在这里得到“hello world”:
$socket = fsockopen("127.0.0.1", 1430, $errno, $errstr, 30);
if($socket) {
fwrite($socket, "hello world");
fflush($socket);
}
但不在这里:
$socket = fsockopen("127.0.0.1", 1430, $errno, $errstr, 30);
if($socket) {
fwrite($socket, "hello world");
fflush($socket);
echo fread($socket, 100);
}
编辑:在评论中回答。我的服务器正在读取直到eof所以它挂起,因为客户端挂在fread而不是关闭流。解决方案是读取服务器端的小缓冲区而不是等待eof的阻塞读取调用