温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php消息队列如何实现

发布时间:2022-05-12 14:27:10 阅读:148 作者:iii 栏目:大数据
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

今天小编给大家分享一下php消息队列如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

说明

1、消息队列是存放在内存中的一个队列。

2、由于消息队列去数据是,只有一个进程能去到,所以不需要额外的锁或信号量。

实例

echo "parent progress pid:{$parentPid}\n";$childList array();
// 创建消息队列,以及定义消息类型(类似于数据库中的库)
$id ftok(__FILE__,'m');
$msgQueue msg_get_queue($id);
const MSG_TYPE 1;
// 生产者
function producer(){
    global $msgQueue;
    $pid posix_getpid();
    $repeatNum 5;
    for $i 1$i <= $repeatNum$i++) {
        $str "({$pid})progress create! {$i}";
        msg_send($msgQueue,MSG_TYPE,$str);
        $rand rand(1,3);
        sleep($rand);
    }
}
// 消费者
function consumer(){
    global $msgQueue;
    $pid posix_getpid();
    $repeatNum 6;
    for $i 1$i <= $repeatNum$i++) {
        $rel msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message);
        echo "{$message} | consumer({$pid}) destroy \n";
        $rand rand(1,3);
        sleep($rand);
    }
}
function createProgress($callback){
    $pid pcntl_fork();
    if $pid == -1) {
        // 创建失败
        exit("fork progress error!\n");
    } else if ($pid == 0) {
        // 子进程执行程序
        $pid posix_getpid();
        $callback();
        exit("({$pid})child progress end!\n");
    }else{
        // 父进程执行程序
        return $pid;
    }
}
// 3个写进程
for ($i 0$i 3$i ++ ) {
    $pid createProgress('producer');
    $childList[$pid] = 1;
    echo "create producer child progress: {$pid} \n";
}
// 2个写进程
for ($i 0$i 2$i ++ ) {
    $pid createProgress('consumer');
    $childList[$pid] = 1;
    echo "create consumer child progress: {$pid} \n";
}
// 等待所有子进程结束
while(!empty($childList)){
    $childPid pcntl_wait($status);
    if ($childPid 0){
        unset($childList[$childPid]);
    }
}
echo "({$parentPid})main progress end!\n";

以上就是“php消息队列如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4586362/blog/4413636

php
AI

开发者交流群×