[PHP] PHP多进程处理tcp连接

复制代码
<?php
if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
{
        echo "failed to create socket: ".socket_strerror($sock)."\n";
        exit();
}

if(($ret = socket_bind($sock,'127.0.0.1', 8888)) < 0)
{
        echo "failed to bind socket: ".socket_strerror($ret)."\n";
        exit();
}

if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) 
{
        echo "failed to listen to socket: ".socket_strerror($ret)."\n";
        exit();
}

while (true)
{
        $conn = @socket_accept($sock);

        //子进程
        if(pcntl_fork() == 0)
        {   
                $recv = socket_read($conn, 8192);
                //处理数据
                $send_data = "server: ".$recv;
                socket_write($conn, $send_data);
                socket_close($conn);
                exit(0);
        }   
        else
        {   
                socket_close($conn);
        }   
}
复制代码

每一个连接对应一个进程,类似apache的perwork模式

 

 

php多进程的解释

复制代码
<?php

$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
    //错误处理:创建子进程失败时返回-1.
     die('could not fork');
} else if ($pid) {
     //父进程会得到子进程号,所以这里是父进程执行的逻辑
     pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
} else {
     //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
}
?>
复制代码

 

posted @   唯一客服系统开发笔记  阅读(857)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
1
chat with us