博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php多进程-使用消息队列sysvmsg通讯
阅读量:3985 次
发布时间:2019-05-24

本文共 1447 字,大约阅读时间需要 4 分钟。

在PHP多进程中同样可以sysvmsg扩展来实现消息队列

php -m |grep sysvmsg

默认会安装这个扩展的。

因为我们知道,虽然上下文在子进程里是隔离的,但是主进程中打开的fd和子进程是共享的,可以同时操作。

子进程是以抢占式来消费队列,不会重复消费。

ftok()	可以将一个路径转换成消息队列可用的key值	msg_get_queue()	第一个参数 是消息队列的key,第二个参数是消息队列的读写权限,这个权限跟文件类似	msg_send()	第1个参数 : resource $queue 表示要写入的消息队列资源。	第2个参数 : int $msgtype 表示写入消息队列的 消息类型,这个参数是 配合 msg_receive读取消息队列函数 使用的,下面会说	第3个参数 : mixed $message 你要发送的信息,最大为 65536 个字节。	第4个参数 : bool $serialize = true 为可选项,是否序列化你发送的消息。	第5个参数 : bool $blocking = true 是否阻塞,当你发送的消息很大,而此时的消息队列无法存入的时候,此时消息队列就会阻	塞,除非等到有别的进程从消息队列中读取了别的消息,然后消息队列有足够的空间存储你要发送的信息,才能继续执行。你可以设	置这个参数为false,这样你发送信息就会失败,此时错误信息会在 第6个参数 $errorcode中体现,错误码为 MSG_EAGAIN ,你	可以根据这个错误码,重新发送你的消息。	第6个参数 : int &$errorcode 记录写入中出现的一系列错误。	msg_receive()	第1个参数:resource $queue 表示要读取的消息队列资源。	第2个参数 :int $desiredmsgtype 读取的消息类型。这个参数为 0 的时候,你可以读取 msg_send 以任意 消息类型 发送的消	息。 如果此参数和你发送的某个消息类型相同,比如你有 2个消息,一个是通过 1类型发送的,一个是通过2 类型发送的。你	用 0 可以接收这两种消息 ,而你用 1 只能接收到 以1类型发送的消息。	第3个参数 : int &$msgtype 你读取到的信息,它发送时的消息类型会存储在该参数中。	第4个参数 : int $maxsize 你以多大的字节去读取消息,如果这个值小于你要读取的内容的长度,你会读取失败。	第5个参数 :mixed &$message 读取的内容。	第6个参数 : bool $unserialize = true 内容是否序列化	第7个参数 :int $flags = 0 读取标识。除了默认的0 之外,还有3个参数可选 MSG_IPC_NOWAIT 这个参数表示如果没有从消息队	列中读取到信息,会立马返回,并返回错误码 MSG_ENOMSG.    MSG_EXCEPT 这个参数 是配合 第2个参数使用的,如果使用这个参数,你读取到的第一个参数,不是你第一个发送的参数。(队    列先进先 出)    MSG_NOERROR 如果读取的内容过大,而你指定的第4个参数又不够的时候,它会截断这个消息,并且不报错。	msg_remove_queue()	销毁消息队列的方法

示例:

start();// 回收子进程while($ret = Swoole\Process::wait(true)){}

优化后

转载地址:http://brxui.baihongyu.com/

你可能感兴趣的文章
No.148 - LeetCode771
查看>>
No.172 - LeetCode1301
查看>>
No.173 - LeetCode1304
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.177 - LeetCode1310
查看>>
No.178 - LeetCode1311
查看>>
Mac:终端实用快捷键
查看>>
FE:http状态码
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
No.183 - LeetCode1324
查看>>
mac:移动python包路径
查看>>
No.221 - LeetCode[81] Search in Rotated Sorted Array II - 有重复元素单调数组截断后的二分
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql alter table修改表的字符集
查看>>
mysql:sql alter table 修改列属性的字符集
查看>>
mysql:sql drop database 删除数据库
查看>>
mysql:sql character set utf8mb4 新建utf8mb4表
查看>>