ソケットに関してはかなり特殊な問題があります。セットアップの基礎は、PHP で書かれた forking ソケット サーバーです。(私は知っています、PHP、ブーなどなど)
これの非常に基本的なコード サンプルは...
$controlSockets = stream_socket_pair();
$pid = pcntl_fork();
if($pid == -1)
throw new Exception("Fork error");
else if($pid) {
fclose($controlSockets[0]);
while(true) {
$read = array($controlSockets[1]);
$write = array();
$except = array();
// Sleep for half a second if there's nothing to read
while(stream_select($read, $write, $except, 0, 500000) > 0) {
$r = fgets($controlSockets[1]);
echo "'$r'\n read from socket."; // This outputs ''
}
// Re-set the read array as stream_select alters the array
$read = array($controlSockets[1]);
}
} else {
fclose($controlSockets[1]);
// do some work ...
sleep(5);
// end of work ...
$result = 'blah';
fputs($controlSockets[0], $result);
exit;
}
さて、問題は、ソケットが読み取りコレクションに含まれていても、空の文字列を返すことです。これは、feof に到達するか、実際にコンテンツが存在しない限り、私の知る限り決して起こらないはずです。実行の最初の 5 秒間はありません。
ただし、送信される実際のコンテンツは問題なく届きます。
何が起こっているかについての手がかりはありますか?
(上記のコードは疑似コードであり、実際のサンプルが機能するかどうかはわかりませんが、何が起こっているのかは一般的な考えです)