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

目录
相关文章
|
9月前
|
消息中间件 存储 网络协议
从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘
本文详细介绍了进程间通信(IPC)的六种主要方式:管道、信号、消息队列、共享内存、信号量和套接字。每种方式都有其特点和适用场景,如管道适用于父子进程间的通信,消息队列能传递结构化数据,共享内存提供高速数据交换,信号量用于同步控制,套接字支持跨网络通信。通过对比和分析,帮助读者理解并选择合适的IPC机制,以提高系统性能和可靠性。
1197 14
|
8月前
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
303 48
|
8月前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
172 16
|
8月前
|
PHP Docker 容器
如何在宿主主机运行容器中的php守护进程
在Docker容器中同时运行多个程序(如Nginx+PHP+Ftp)时,需用`docker exec`命令启动额外服务。首先通过`php -v`查看PHP版本,再用`which php-fpm7.4`确认PHP安装路径,通常返回`/usr/sbin/php-fpm7.4`。最后直接运行该路径启动PHP-FPM服务,确保其正常工作。
145 14
|
11月前
|
消息中间件 存储 监控
消息队列通信的优缺点
【10月更文挑战第29天】消息队列通信具有诸多优点,如解耦性强、异步通信、缓冲削峰等,能够有效地提高系统的灵活性、可扩展性和稳定性。但同时也存在一些缺点,如系统复杂性增加、性能开销、数据一致性挑战和实时性受限等。在实际应用中,需要根据具体的业务需求和场景,权衡其优缺点,合理地选择和使用消息队列通信机制,以实现系统的高效运行和优化。
|
11月前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
11月前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
9月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
631 20
|
11月前
|
PHP
PHP的pcntl多进程用法实例
PHP使用PCNTL系列的函数也能做到多进程处理一个事务。
100 12
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
817 4
下一篇
oss教程