当前位置: 首页 > 后端技术 > PHP

Swoole笔记(四)

时间:2023-03-29 14:25:44 PHP

ProcessProcess是swoole内置的进程管理模块,用于替代PHP的pcntl扩展。swoole_process支持重定向标准输入输出。在子进程中,echo不会打印屏幕,而是写入管道。读取键盘输入可以重定向到管道以读取数据。借助swoole_event模块,创建的PHP子流程可以是异步事件驱动方式。创建子流程函数原型:intswoole_process::__construct(mixed$function,$redirect_stdin_stdout=false,$create_pipe=true);$function,子进程创建成功后要执行的函数,底层会自动将该函数保存到对象属性的回调中。如果要更改执行的函数,可以将新函数分配给对象的回调属性。$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();//获取执行结果示例:网页版shellhttps://github.com/52fhy/swoo...EventLoopswoole也提供了一个接口,可以直接操作底层的epoll/kqueue事件循环。其他扩展创建的sockets,PHP代码中stream/socket扩展创建的sockets等都可以添加到Swoole的EventLoop中。swoole_event_add函数用于给swoole的reactor事件监听添加一个socket。函数原型:boolswoole_event_add(int$sock,mixed$read_callback,mixed$write_callback=null,int`$flags`=null);$sock支持文件描述符、流资源、套接字资源。$read_callback是一个可读的回调函数。$write_callback是可写事件回调。$flags是事件类型的掩码,可以选择关闭/开启可读可写事件,如SWOOLE_EVENT_READ、SWOOLE_EVENT_WRITE或SWOOLE_EVENT_READ|SWOOLE_EVENT_WRITE。在Server程序中使用,可以理解为在worker/taskworker进程中的epoll事件中注册这个socket。在Client程序中使用,可以理解为在client进程中的epoll事件中注册这个socket。示例:\n";}else{fwrite($fp,"GET/HTTP/1.1\r\n主机:www.52fhy.com\r\n\r\n");while(!feof($fp)){echofgets($fp,1024);}fclose($fp);}echo"完成\n";