PHP多进程处理tcp连接
<?phpif(($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, 所以这里是子进程执行的逻辑。
}
?>
以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>视频、面试文档免费获取
以上是 PHP多进程处理tcp连接 的全部内容, 来源链接: utcz.com/z/516869.html