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

RoadRunner和PHP通信的工作原理

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

本来也知道其工作原理,但是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多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

PHP getenv函数和putenv函数的学习

PHP getenv函数和putenv函数的学习

(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...

php json_encode 使用注意

php json_encode 使用注意

参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)代码:<?php $dbms = 'mysql'; $host = '192.168.8.8'; $dbName =&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的回调地址,这个回调地址目的就是...

php new class

php new class

<?php $member = new class {     public function getInfo()     {    ...

php执行慢原因查找

php执行慢原因查找

今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...