RoadRunner和PHP通信的工作原理

本来也知道其工作原理,但是php仅支持命名管道,且windows下不支持命名管道。RoadRunner官方说默认就是管道,我想看看windows下如何实现,于是看了下源码。

执行流程如下:

(1).启动go进程,go创建http-server,同时go调用php ./xxx.php 开启多个php命令行进程

(2).当go进程接收到http消息,通过标准输入传递给php命令行进程

(3).php读取进程的标准输入数据,php返回的数据写入到标准输出

(4).go进程读取到php进程的标准输出响应客户端

当然roadRunner也支持TCP_SOCKET、UNIX_SOCKET通信方式交互php

php-worker进程伪代码,php进程阻塞获取信息。

<?php
$count = 0;
while (true) {

$httpMessage = fread(STDIN, 1024);
if ($httpMessage) {
    $count++;
    fwrite(STDOUT, '茹您所愿,这是您访问本站的第' . $count . '次' . PHP_EOL);
}

}
这里我不太清楚从专业术语来讲标准输入输出是否算管道,但是和命名管道功能差不多。而且也不清楚这种方式的性能如何。而nginx和fpm是通过TCP_SOCKET、UNIX_SOCKET,没有通过这种方式通信。

上一篇:flex“深拷贝”


下一篇:C# ListView如何在列头和内容绑定不同菜单