Swoole进程间通信方式有什么,怎样做
Admin 2022-08-31 群英技术资讯 336 次浏览
Swoole进程间通信的方式
管道pipe
管道用于进程之间的数据交互,Linux系统本身提供了pipe函数用于创建一个半双工通信管道。半双工的通信方式中数据只能单向流动(一端只读一端只写),只能在具有亲缘关系(父子进程)的进程之间使用。 (推荐学习: swoole视频教程)
管道是进程间通信IPC中最基础的方式,管道有两种类型分别是命名管道、匿名管道。
匿名管道:专门用于具有血缘关系的进程之间,完成数据传递。命名管道:可以用在任何两个进程之间,Swoole中的管道都是匿名管道。
在Swoole中利用eventfd和UnixSock封装了两种管道,使得进程之间的通信更加灵活。
Swoole的Process模块内置了管道的方式用于进程间通信,在构建Process实例时只要开启了$pipe_type选项,Swoole底层会自动创建一个管道,这里需要说明的时,虽然名字上叫做管道,但实际上在新版Swoole中底层通信是通过UnixSock实现的,所以并不是真正意义上的Linux Pipe。
创建进程
swoole_process::__construct( callable $function, bool $redirect_stdin_stdout = false, int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = false );
管道类型$pipe_type可分为三种:
0表示不创建管道
1表示创建SOCK_STREAM类型的管道
2表示创建SOCK_DGRAM类型的管道
当启用$redirect_stdin_stdout后,$pipe_type选项将忽略用户参数,强制为1。
管道描述符
当进程被fork出来后,父进程和子进程中的Process对象会被设置上一个名为pipe的成员变量,存放着底层UnixSocket的描述符,父进程和子进程可以通过这个管道描述符来发送数据,也可以直接调用Process提供的read/write接口来收发数据。
object(Swoole\Process)#1 (6) { ["pipe"]=>int(4) ["callback"]=>NULL ["msgQueueId"]=>NULL ["msgQueueKey"]=>NULL ["pid"]=>int(287) ["id"]=>NULL}
管道读写
swoole_process->write(string $data) 向进程的管道中写入数据
swoole_process->read(int $buffer_size = 8192) 从进程的管道中读取数据
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
swoole重启的方法:可以通过$swoole->reload(),或者\swoole_process::kill($master_pid,SIGUSR1),或者直接kill -USR1 master_pid等方法平滑重启。
PHP透明地支持 HTTP cookie。cookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。可以用 setcookie() 或 setrawcookie() ...
/path/to/pkphp.com/script.php?ajax 在php脚本中使用如下方法判断: 代码如下: if(isset($_GET['ajax'])){ ...这是一个ajax请求,然后... }&nb...
本篇文章整理分享六个能提高代码可读性的 Laravel Eloquent 小技巧,希望对大家有所帮助!
先说一下exit函数的用法。 作用:输出一则消息并且终止当前脚本。 如果一段文本中包括多个以结束的脚本,则exit退出当前所在脚本。 比如一篇php文本包括一下代码,则输出为world。 <% echo"hello"; exit; ?> echo"world"; ?> 语法格式:void表示没有返回值。 voidexit([string$status]) vo
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008