Como usar pipes nomeados no PHP entre diferentes funções ou até mesmo diferentes processos sem fork?

Eu quero escrever uma aplicação web Ajax, um jogo para ser específico. Dois clientes da web precisam se comunicar através do servidor PHP. Minha abordagem para resolver isso é usar o Ajax entre cliente e servidor e servidor e cliente. Cada cliente cria um processo de servidor separado usando o Ajax. Eu quero que esses dois processos do servidor se comuniquem via MySQL e através de pipes nomeados. Eu preciso dos pipes nomeados para obter resposta imediata para o aplicativo inteiro.

Eu não posso usar um processo de servidor, que primeiro cria um pipe e, em seguida, se bifurca em dois processos, que usam o pipe. Aplicativos da Web criam processos do servidor quando o navegador da Web envia uma solicitação. Então, eu preciso de pipes nomeados, onde cada processo não sabe mais do que o nome do arquivo do pipe nomeado. Eles não podem trocar alças de arquivos (pelo menos eu não sei como).

Meu problema é que os pipes nomeados na maneira PHP realmente funcionam desde que sejam usados ​​dentro da mesma função:

public function writeAndReadPipe_test(){
    $pipeA = fopen("testpipe",'r+');
    fwrite($pipeA, 'ABCD');

    $pipeB = fopen("testpipe",'r+');
    $content = fread($pipeB, 4);
    echo "[" . $content . "]<br>\n";
}

public function testingPipes_same_function(){
    posix_mkfifo("testpipe", 0777);
    $this->writeAndReadPipe_test();
}

Mas, quando eu uso funções diferentes, então ofread($pipeB, 4) comando bloqueia toda a aplicação:

public function writePipe_test(){
    $pipeA = fopen("testpipe",'r+');
    fwrite($pipeA, 'ABCD');
}

public function readPipe_test(){
    $pipeB = fopen("testpipe",'r+');
    $content = fread($pipeB, 4);
    echo "[" . $content . "]<br>\n";
}

public function testingPipes_different_functions(){
    posix_mkfifo("testpipe", 0777);
    $this->writePipe_test();
    $this->readPipe_test();
}

Alguém sabe por quê? E o que posso fazer para que funcione entre diferentes funções no primeiro passo? Na segunda etapa, deve funcionar mesmo entre diferentes processos! Eu descobri que também tenho um problema quando o escritor fecha o pipe antes que o leitor leia. Eu suponho que a função fecha automaticamente quando termina, mas isso é apenas um palpite.

Se o modo PHP não funcionar, eu planejo deixar o PHP abrir uma linha de comando, gerar comandos BASH e deixar executá-los. Isso deve funcionar em qualquer caso, desde que o meu servidor web funcione em um ambiente LAMP. Desvantagem é que não funcionará em ambientes WAMP.

Então, alguém tem algumas idéias para isso?

P.S: Eu preciso de tubos de bloqueio para deixar o leitor esperar até que um evento seja enviado. Eu sei que os tubos podem trabalhar em um modo sem bloqueio usando

stream_set_blocking($pipe,false);

mais ou menos, mas a ideia é fazê-lo sem pesquisar apenas usando um pipe, que acorda o leitor assim que um evento é disparado.

questionAnswers(3)

yourAnswerToTheQuestion