swoole(7)php进程间通信-消息队列
php实现消息队列操作
ftok:可以将一个路径转换成消息队列可用的key值
msg_get_queue:第一个参数是消息队列的key 第二个参数是消息队列的读写权限
server代码:
<?php
/**
* Created by PhpStorm.
* User: huahua
* Date: 2020/3/6
* Time: 下午3:51
*/ /**
* 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个参数又不够的时候,它会截断这个消息,并且不报错。
*/ //生成消息队列的key
$key = ftok(__DIR__,'u');
//产生一个消息队列
$queue = msg_get_queue($key); $pid = pcntl_fork(); if ($pid == 0){
//将一条消息加入到消息队列
// msg_send($queue,10,"hailo");
//从消息队列中读取一条消息
msg_receive($queue,6,$message_type,1024,$message);
var_dump($message);
exit();
}elseif ($pid){
// msg_receive($queue,10,$message_type,1024,$message);
// var_dump($message); pcntl_wait($status);
msg_remove_queue($queue);
}
test.php
<?php
/**
* Created by PhpStorm.
* User: huahua
* Date: 2020/3/6
* Time: 下午3:06
*/
$key=ftok(__DIR__,'u');
$msg_queue=msg_get_queue($key);
msg_send($msg_queue,10,"我是外部程序发送的消息");
cli下执行结果:
swoole(7)php进程间通信-消息队列的更多相关文章
- PHP 进程间通信——消息队列(msg_queue)
PHP 进程间通信--消息队列 本文不涉及PHP基础库安装.详细安装说明,请参考官网,或期待后续博客分享. 1.消息队列函数准备 <?php//生成一个消息队列的key$msg_key = ft ...
- Linux进程间通信-消息队列(mqueue)
前面两篇文章分解介绍了匿名管道和命名管道方式的进程间通信,本文将介绍Linux消息队列(posix)的通信机制和特点. 1.消息队列 消息队列的实现分为两种,一种为System V的消息队列,一种是P ...
- Linux下进程间通信--消息队列
消息队列的定义遍地都是,不想移驾,请看下文: 一.定义: 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法. 每个数据块都被认 为是有一个类型,接收者进程接收的数据块可以有不同的类型值.我 ...
- 详解linux进程间通信-消息队列
前言:前面讨论了信号.管道的进程间通信方式,接下来将讨论消息队列. 一.系统V IPC 三种系统V IPC:消息队列.信号量以及共享内存(共享存储器)之间有很多相似之处. 每个内核中的 I P C结构 ...
- Linux进程间通信—消息队列
四.消息队列(Message Queue) 消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息.Linux维护了一个消息队列向量表:msgque,来表示系统中所有的 ...
- Linux 进程间通信 消息队列 实现两个进程间通信
例子: 通过消息队列实现两个进程间通信,一个进程从终端输入数据,通过消息队列发送,另一个进程通过消息队列接收数据 文件1 创建进程1 终端输入通过消息队列发送数据 #include <stdio ...
- 进程间通信消息队列msgsnd执行:Invlid argument——万恶的经验主义
最近在搞进程间通信,首先在我的ubuntu 14.04上写了接口和测试demo,编译和执行都OK,,代码如下: 接口文件ipcmsg.h /* ipcmsg.h */ #ifndef H_MSGIPC ...
- linux进程间通信-消息队列
一 消息队列的介绍 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法. 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构. 我们可以通过发送消息来避免命名管道的 ...
- IPC进程间通信---消息队列
消息队列 消息队列:消息队列是一个存放在内核中的消息链表,每个消息队列由消息队列标识符标识.与管道不同的是消息队 列存放在内核中,只有在内核重启(即操作系统重启)或者显式地删除一个消息队列时,该消息队 ...
- linux进程间通信消息队列:msgsnd: Invalid argument
今天写了个消息队列的小测试程序结果send端程序总是出现:msgsnd: Invalid argument,搞了半个小时也没搞明白,后来查资料发现我将(st_msg_buf.msg_type = 0; ...
随机推荐
- Flutter showModalBottomSheet改变高度
showModalBottomSheet改变高度 将isScrollControlled设置为true,此时弹窗会全屏展示,再返回一个带高度的SizedBox,就可以指定弹窗的高度了 showModa ...
- 【PHP】连接数据库验证登陆
界面 <!doctype html> <html lang="en"> <head> <!-- Required meta tags -- ...
- 微信小程序无法抓包
1.问题 1.1. 问题描述 夜神模拟器中,微信小程序请求超时(是因为开了抓包程序) 1.2. 问题截图 2.解决问题 2.1. 步骤 开启调试模式,之后重启小程序 2.2. 结果
- FISCO BCOS 控制台 部署合约 调用 查看已部署合约的地址
deploy 部署合约.(默认提供HelloWorld合约和TableTest.sol进行示例使用) 参数: 合约路径:合约文件的路径,支持相对路径.绝对路径和默认路径三种方式.用户输入为文件名时,从 ...
- 龙哥量化:通达信DRAWICON的图标副图显示效果(鸡肋,可以不看)
新建一个副图指标,复制粘贴源码,先看一下效果图 DRAWTEXT_FIX(1,0.01,0.01,0,'通达信中DRAWICON的图标,方便大家折腾指标'),COLORMAGENTA; A:=CURR ...
- Qt编写音频播放示例(带音频曲线/振幅/传输/录制等)
一.功能特点 自动计算音频振幅,绘制音频振幅曲线和音频数据曲线. 支持音频录制,可选音频输入设备.采样频率.通道等参数,Qt5默认保存wav格式,Qt6默认保存mp3格式,Qt6可选wma.aac等格 ...
- Springboot+Vue进行Web开发时特别需要注意的小事项
Springboot+Vue进行Web开发时特别需要注意的小事项: 1.在测试页面效果时,如果没有特别设置安全Http访问,在输入url请求测试网页时,只能使用http://......,而不能使用h ...
- 即时通讯技术文集(第13期):Web端即时通讯技术精华合集 [共15篇]
为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第13 期. [- 1 -] 新手入门贴:史上最全Web端即时通讯技术原理详解 [链接] http ...
- Appium_ios自动化问题汇总
1.使用Xcode遇到的问题 xcode-select: error: tool 'instruments' requires Xcode, but active developer director ...
- el-table关于选择行的三个常用事件
变量声明 data(){ return{ selectList: [], } } 事件绑定 <el-table @select-all="selectAllChange" @ ...