Swoole进程间通信方式有什么,怎样做
Admin 2022-08-31 群英技术资讯 721 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP的new static和new self不同在哪?一些PHP新手可能对new static和new self的区别不是很清楚吗,对此本文就通过一个例子给大家介绍一下两者的不同的,以及使用要注意的问题。那么感兴趣的朋友就继续往下看吧。
在laravel中,路由的作用就是将用户的不同url请求转发给相应的程序进行处理;路由是外界访问laravel应用程序的通路,路由定义了Laravel的应用程序向外界提供服务的具体方式,laravel的路由定义在routes文件夹中。
本篇文章给大家带来的内容是关于PHP错误日志和内存查看的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
WebService接口在PHP中的使用:1、主要是基于web的服务,首先确保开启了扩展 extension,建立与php的联系;2、接着创建一个客户端;3、最后调用对应的WebService接口。
PHP支持C风格的前/后递增与递减运算符。Note: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。递增/递减运算符例子...
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008