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, 所以这里是子进程执行的逻辑。

}

?>

以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里   PHP进阶架构师>>>视频、面试文档免费获取

以上是 PHP多进程处理tcp连接 的全部内容, 来源链接: utcz.com/z/516869.html

回到顶部