资讯专栏INFORMATION COLUMN

Swoole笔记(四)

yzd / 705人阅读

摘要:配合模块,创建的子进程可以异步的事件驱动模式。默认为阻塞读取。函数用于将一个加入到的事件监听中。为事件类型的掩码,可选择关闭开启可读可写事件,如,,或者。在程序中使用,可以理解为在进程中将此注册到事件中。

Process

Process是swoole内置的进程管理模块,用来替代PHP的pcntl扩展。

swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据。

配合swoole_event模块,创建的PHP子进程可以异步的事件驱动模式。

创建子进程

函数原型:

int swoole_process::__construct(mixed $function, $redirect_stdin_stdout = false, $create_pipe = true);

$function,子进程创建成功后要执行的函数,底层会自动将函数保存到对象的callback属性上。

如果希望更改执行的函数,可赋值新的函数到对象的callback属性。

$redirect_stdin_stdout,重定向子进程的标准输入和输出。启用此选项后,在进程内echo将不是打印屏幕,而是写入到管道。读取键盘输入将变为从管道中读取数据。默认为阻塞读取。

$create_pipe,是否创建管道,启用$redirect_stdin_stdout后,此选项将忽略用户参数,强制为true 如果子进程内没有进程间通信,可以设置为false。

1.7.22或更高版本允许设置管道的类型,默认为SOCK_STREAM流式
参数$create_pipe为2时,管道类型将设置为SOCK_DGRAM

read();
        passthru($cmd);
    }    
}, true, 2);
$process->start();

$process->write("ls -l");//将参数传入子进程内
echo $data = $process->read();//获取执行结果

实例:web版本的shell
https://github.com/52fhy/swoo...

EventLoop

swoole还提供了直接操作底层epoll/kqueue事件循环的接口。可将其他扩展创建的socket,PHP代码中stream/socket扩展创建的socket等加入到Swoole的EventLoop中。

swoole_event_add函数用于将一个socket加入到swoole的reactor事件监听中。 函数原型:

bool swoole_event_add(int $sock, mixed $read_callback, mixed $write_callback = null, int `$flags` = null);

$sock支持文件描述符、stream资源、sockets资源。

$read_callback为可读回调函数。

$write_callback为可写事件回调。

$flags为事件类型的掩码,可选择关闭/开启可读可写事件,如SWOOLE_EVENT_READSWOOLE_EVENT_WRITE,或者SWOOLE_EVENT_READ | SWOOLE_EVENT_WRITE

在Server程序中使用,可以理解为在worker/taskworker进程中将此socket注册到epoll事件中。

在Client程序中使用,可以理解为在客户端进程中将此socket注册到epoll事件中。

示例:


对比一下,下面这个会阻塞进程:


" ;
} else {
     fwrite ( $fp ,  "GET / HTTP/1.1
Host: www.52fhy.com

" );
    while (! feof ( $fp )) {
        echo  fgets ( $fp ,  1024 );
    }
     fclose ( $fp );
}

echo "Finish
";

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25665.html

相关文章

  • PHP多进程系列笔记(五)

    摘要:消息队列更常见的用途是主进程分配任务,子进程消费执行。子进程前面加了个,这是为了防止父进程还未往消息队列中加入内容直接退出。 前面几节都是讲解pcntl扩展实现的多进程程序。本节给大家介绍swoole扩展的swoole_process模块。 swoole多进程 swoole_process 是swoole提供的进程管理模块,用来替代PHP的pcntl扩展。 首先,确保安装的swoole...

    qianfeng 评论0 收藏0
  • swoole 学习笔记swoole 真的优秀一个框架

    摘要:所以,我感觉学习,需要一个引导。学习参考链接喵星球特别厉害的一个官网的几个框架文档优势先看一下的结构设计的应用场景的设计项目中引入一个简易的具体参考一篇文章,集合和的简易实例项目中引入结合致敬 前期学完了操作系统,特别是知道了进程,线程 调度的问题。回来看,发现了很多细节。第三次看文档,最初经一个高手朋友的介绍,看swoole,说文档写的贼好。但是看的时候,也是很一头雾水,只知道把de...

    13651657101 评论0 收藏0
  • Swoole笔记(一)

    摘要:修复添加超过万个以上定时器时发生崩溃的问题增加模块,下高性能序列化库修复监听端口设置无效的问题等。线程来处理网络事件轮询,读取数据。当的三次握手成功了以后,由这个线程将连接成功的消息告诉进程,再由进程转交给进程。此时进程触发事件。 本文示例代码详见:https://github.com/52fhy/swoo...。 简介 Swoole是一个PHP扩展,提供了PHP语言的异步多线程服务器...

    SHERlocked93 评论0 收藏0
  • swoole 学习笔记

    摘要:安装准备或更高版本或更高版本安装扩展配置支持编辑在其中加入扩展支持服务端代码服务端客户端代码测试代码在命令模式下输入重新再开一个窗口可以用检测如服务端客户端如上,表示服务端启动,客户端连接服务端返回消息,一个闭环形成开发者头条 1.安装准备 php-5.3.10 // 或更高版本 gcc-4.4 //或更高版本 make autoconf 2.安装swoole扩展 w...

    justCoding 评论0 收藏0
  • Swoole笔记(二)

    摘要:配置了参数后将会启用功能,务必要注册个事件回调函数。周期性定时器一次性定时器清除定时器定时器回调函数注意最大不得超过。进程中不能添加定时器。建议在回调里写定时器。定时器示例防止重复每隔触发一次后执行此函数 本文示例代码详见:https://github.com/52fhy/swoo...。 重新打开日志 在1.8.11及之后版本支持重新打开日志:向Server主进程发送SIGRTMIN...

    jsummer 评论0 收藏0

发表评论

0条评论

yzd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<