php多进程处理,php 多进程处理 http 请求

使用 stream_socket_server 监听tcp连接,并实现http协议。多进程监听套接字

代码:

$curChildPro = 0;

$maxChildPro = 5; // 同一时刻最多 5 个进程

$index = 0;

$ppid = posix_getpid();

$socket = stream_socket_server("tcp://0.0.0.0:8081", $errno, $errstr);

while ($index<20) {

if(!$socket){

$socket = stream_socket_server("tcp://0.0.0.0:8081", $errno, $errstr);

}

$index ++;

$pid = pcntl_fork();//在此处代码会裂开两部分,一个父进程,一个子进程,可以共享$index变量

if ($pid == -1) {

//fork失败

}elseif ($pid > 0) {

$curChildPro++;

//父进程会得到子进程号$pid,所以这里是父进程执行的逻辑

//echo "-------- current process\e[1;31m" . $curChildPro . "\e[0m--------.\r\n";

//echo "\e[1;31m我是父进程{$index},我的进程id是{$ppid}.我的子进程id{$pid}\e[0m".PHP_EOL;

cli_set_process_title("我是父进程{$index},我的进程id是{$ppid}.我的子进程id{$pid}");

if ($curChildPro >= $maxChildPro) {

pcntl_wait($status);

$curChildPro--;

}

}elseif($pid==0){

$cpid = posix_getpid();

//echo "我是{$ppid}的子进程,我的进程{$index}id是{$cpid}.".PHP_EOL;

cli_set_process_title("我是{$ppid}的子进程,我的进程id是{$cpid}.");

if (!$socket) {

sleep(1);

echo "$errstr ($errno)
\n";

} else {

echo '正在监听';

while ($conn = stream_socket_accept($socket)) {

$res="HTTP/1.1 200 ok\r\nAccept-Ranges: bytes\r\ncontent-type: text/html; charset=utf-8\r\n\r\nThe local time is ".date('Y-m-d H:i:s')."\r\n";

fwrite($conn,$res);

echo $index.'
';

fclose($conn);

}

}

exit(); // 需要退出,避免产生僵尸进程

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值