本来也知道其工作原理,但是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,没有通过这种方式通信。
应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...
在使用ftok生成ipc进程通信key尝试将第二个参数项目标识符传入字符串报错:PHP Warning: ftok(): Project identifier is invalid,查阅资料发现第二个字符串只能是1个字符串,长度为1....
众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:try { //开启事务 Db::startTrans(); &...
在正式介绍前先抛出一段代码:<?php //输入的密码 $password = empty($_POST['password']) ? 0 : $_POST['password']; //设置的密码...
pear config-set http_proxy 47.94.200.124:3128 pecl config-set http_proxy 60.216.101.46:32868家里的长城宽带什么都上不去,安装php扩展真麻烦,使用网...
sqlsrv扩展是php操作SQL Server的驱动下载地址:http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx下载完成后打开解压到指定目录,找到对应php版本的扩展,记得下载nts版本的。下载完扩展后,然后复制指定的dll文件到对应ph...