本人的项目涉及到客户端/服务器的数据交互,客户端将数据发送到web服务器后,需要通过web的php进程调用后台的python进程进行数据处理。处理完毕后python进程需通知php将处理结果返回客户端。
1.创建两个命名管道
mkfifo -m 755 php2py # 保存php进程向python进程传递的数据
mkfifo -m 755 py2php # 保存python进程向php进程传递的数据
2.编写python部分代码
while True:
fread = open("php2py", "r")
fwrite = open("py2php", "w")
str = fread.read(1024)
fwrite.write(str)
fwrite.close()
fread.close()
它的作用是从第一个管道读入数据后写入第二个管道中
3.编写php部分代码
<?php
function write($content)
{
$fwrite = fopen("php2py", "w");
fwrite($fwrite, $content);
fclose($fwrite);
}
function read()
{
$fread = fopen("py2php", "r");
$content = fread($fread, 1024);
fclose($fread);
return $content;
}
for($i=0; $i<10; $i++)
{
$num = $i;
write($num);
$num_read = read();
assert($num === $num_read);
echo $num_read, "\n";
}
它完成了10次进程通信,当每次的输出数字与传递的数字相同时,说明进程通信成功。
4.实验方法
这是实验目录。
[root@iZwz9a8g2mt6x5kq9jp6abZ pipeTest]# ls
php2py PhpTest.php py2php PyTest.py
先在一个终端启动python进程。
python PyTest.py
接着在另一个终端启动php进程,观察输出信息。
[root@iZwz9a8g2mt6x5kq9jp6abZ pipeTest]# php PhpTest.php
0
1
2
3
4
5
6
7
8
9
证明实验成功!