php进程通信-消息队列(2)

简介: php进程通信-消息队列

四:linux相关操作

在linux中,主要用ipcs(查看) ipcrm(删除)

1:ipcs  

ipcs -h,可查看帮助

image.png


主要需要记住的是:

ipcs -q (查看消息队列)

image.png

ipcs -l  (查看系统配置)

image.png


2:ipcrm

ipcrm -h:

image.png



ipcrm,只要能删除就行啦~~

ipcrm -q id  (删除指定消息队列)

image.png



3:注意!

在使用消息队列时,请注意消息队列的默认限制(限制消息队列数,和消息队列大小),

当到达上限时,会使得写入消息队列操作阻塞(默认阻塞)


五:封装类

创建队列方法,好像有点问题(创建后无法正确使用队列,估计是__FILE__常量问题),暂时没查

使用封装类方法:

$message_queue_keyftok(__FILE__'a');

if(msg_queue_exists($message_queue_key)){//如果有该消息队列,则删除,用于清空之前队列的无用数据

    msg_remove_queue(msg_get_queue($message_queue_key, 0666));

}

$message_queue= msg_get_queue($message_queue_key, 0666);

$msg_queuenewMsgQueue($message_queue);


<?php

 

/**

 * Created by PhpStorm.

 * User: tioncico

 * Date: 18-5-29

 * Time: 下午11:00

 */

classMsgQueue

{

 

    public$queue;

 

    publicfunction__construct($queue)

    {

        $this->queue = $queue;

    }

 

    publicfunctionpush($data$type= 1)

    {

        $result= msg_send($this->queue, $type$data);

        return$result;

    }

 

    publicfunctionpop($type= 0,$flags= MSG_IPC_NOWAIT)

    {

        msg_receive($this->queue, $type$message_type, 1024, $message,true,$flags);

//        var_dump($message_type);

//        msg_receive($this->queue,$type,$message_type,1024,$message);

        return$message;

    }

 

    publicfunctionclose()

    {

        returnmsg_remove_queue($this->queue);

    }

 

    /**

     * 创建一个队列(TODO:疑问待解决)

     * @param string $path_name

     * @param string $prop

     * @param string $perms

     * @return array

     */

    publicstaticfunctiongetQueue($path_name__FILE__$prop'1'$perms'0666')

    {

        $data              array();

        $data['queue_key'] = ftok($path_name$prop);

        $data['queue']     = msg_get_queue($data['queue_key'], $perms);

        return$data;

    }

}

七:使用例子

<?php

include_once'new/MsgQueue.php';

$message_queue_keyftok(__FILE__'a');

$message_queue= msg_get_queue($message_queue_key, 0666);

$queue_objnewMsgQueue($message_queue);

$pid= pcntl_fork();

if($pid>0){//主进程入列

    while(1){

        $msg$queue_obj->push((array('a'=>321312,'v'=>'casd')),12456);

        sleep(2);

    }

}else{//子进程出列

    while(1){

        $message$queue_obj->pop();

        var_dump($message);

        sleep(1);

    }

}

输出:

image.png

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

目录
相关文章
|
10天前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
12 0
|
1月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
198 4
|
1月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
2月前
|
消息中间件 Linux 开发者
Linux进程间通信秘籍:管道、消息队列、信号量,一文让你彻底解锁!
【8月更文挑战第25天】本文概述了Linux系统中常用的五种进程间通信(IPC)模式:管道、消息队列、信号量、共享内存与套接字。通过示例代码展示了每种模式的应用场景。了解这些IPC机制及其特点有助于开发者根据具体需求选择合适的通信方式,促进多进程间的高效协作。
114 3
|
2月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
2月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上
|
2月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
65 0
|
2月前
|
消息中间件 存储 安全
python多进程并发编程之互斥锁与进程间的通信
python多进程并发编程之互斥锁与进程间的通信
|
3月前
|
消息中间件 安全 PHP
消息队列 MQ使用问题之如何获取PHP客户端代码
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
Python
Python IPC深度探索:解锁跨进程通信的无限可能,以管道与队列为翼,让你的应用跨越边界,无缝协作,震撼登场
【8月更文挑战第3天】Python IPC大揭秘:解锁进程间通信新姿势,让你的应用无界连接
24 0