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

目录
相关文章
|
18天前
|
消息中间件 存储 监控
消息队列通信的优缺点
【10月更文挑战第29天】消息队列通信具有诸多优点,如解耦性强、异步通信、缓冲削峰等,能够有效地提高系统的灵活性、可扩展性和稳定性。但同时也存在一些缺点,如系统复杂性增加、性能开销、数据一致性挑战和实时性受限等。在实际应用中,需要根据具体的业务需求和场景,权衡其优缺点,合理地选择和使用消息队列通信机制,以实现系统的高效运行和优化。
|
14天前
|
PHP
PHP的pcntl多进程用法实例
PHP使用PCNTL系列的函数也能做到多进程处理一个事务。
|
18天前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
18天前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
1月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
23 0
|
2月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
327 4
|
2月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
3月前
|
消息中间件 Linux 开发者
Linux进程间通信秘籍:管道、消息队列、信号量,一文让你彻底解锁!
【8月更文挑战第25天】本文概述了Linux系统中常用的五种进程间通信(IPC)模式:管道、消息队列、信号量、共享内存与套接字。通过示例代码展示了每种模式的应用场景。了解这些IPC机制及其特点有助于开发者根据具体需求选择合适的通信方式,促进多进程间的高效协作。
165 3
|
3月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
3月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上