专栏首页陶士涵的菜地[PHP] PHP多进程处理tcp连接

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [PHP] stream_set_blocking非阻塞模式影响fgets fread函数

    当设置socket为非阻塞时,fread或者fgets函数会立即返回结果,而不需要等待有输入,测试过程可以使用vscode的debug模式来进行 当不设置这一项...

    陶士涵
  • [javaSE] 网络编程(浏览器客户端-自定义服务端)

    获取PrintWriter对象,new出来,构造参数:OutputSream对象,true自动刷新

    陶士涵
  • [PHP] PHP请求Socket接口测试

    使用php读取socket接口的数据,通过php传递请求方法和请求参数,得到返回结果

    陶士涵
  • Web静态服务器

    如果在发送文件的时候,有可能一次发送不完整,显示有误,可能是文件太大。我们可以将send方法改成sendall方法,即可解决

    小闫同学啊
  • Python-socket编程

    一.socket编程 Socket 是网络编程的一个抽象概念。通常我们用一个 Socket 表示“打开了一个网络链接”,而打开一个 Socket 需要知道目标计...

    py3study
  • Python 实战TCP的服务端 - 胖子老板就是服务端

    client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)

    Devops海洋的渔夫
  • java高级进阶|SpringCloud之服务调用组件Feign

    Feign是一个声明式WebService客户端,使用Feign能让编写WebService客户端更加简单,它的使用方式是定义一个接口,然后在上面添加 注解,同...

    后端Coder
  • leetcode 7 | 反转整数(简单题)

    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

    ACM算法日常
  • 01-复杂度1 最大子列和问题 (20分)

    给定KK个整数组成的序列{ N_1N ​1 ​​ , N_2N ​2 ​​ , …, N_KN ​K ​​ },“连续子列”被定义为{...

    AI那点小事
  • Python_实用入门篇_03

    input函数等待用户输入,然后前面的变量指向输入的内容,注意,input函数出来的数据类型全是字符串类型

    py3study

扫码关注云+社区

领取腾讯云代金券