当前位置:首页 > PHP > 正文内容

RoadRunner和PHP通信的工作原理

高老师4年前 (2021-07-09)PHP1393

本来也知道其工作原理,但是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,没有通过这种方式通信。

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/207.html

分享给朋友:

“RoadRunner和PHP通信的工作原理” 的相关文章

php经纬度计算距离

php经纬度计算距离

/**  * 计算两点地理坐标之间的距离  * @param  Decimal $longitude1 起点经度  * @param  Decimal $lati...

PHP高并发下数据库值更新的问题

PHP高并发下数据库值更新的问题

(1).创建数据库test ,创建表shop(字段id,total),商品id是1,商品总数10    (2).PHP模拟购买,商品数量大于0才能购买<?php //连接数据库 $con=mysqli_connect("192.168.2.18...

php多进程,php多进程处理任务,php多进程应用场景

php多进程,php多进程处理任务,php多进程应用场景

php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...

php上传大文件,php大文件上传

php上传大文件,php大文件上传

(1).前端文件:<form action="upload.php" method="post" enctype="multipart/form-data">    &...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

cookie跨域,cookie p3p跨域

cookie跨域,cookie p3p跨域

最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...