首页 > 系统相关 >PHP使用ipc进程间通信

PHP使用ipc进程间通信

时间:2024-09-14 16:37:17浏览次数:11  
标签:ipc type queue 间通信 msg message PHP data public

que.php

<?php
class MsgQueue
{

    public $queue;

    public function __construct($queue)
    {
        $this->queue = $queue;
    }

    public function push($data, $type = 1)
    {
        $result = msg_send($this->queue, $type, $data);
        return $result;
    }

    public function pop($type = 0,$flags = MSG_IPC_NOWAIT)
    {
        msg_receive($this->queue, $type, $message_type, 1024, $message,true,$flags);
//        var_dump($message_type);
        return $message;
    }

    public function close()
    {
        return msg_remove_queue($this->queue);
    }

    public static function getQueue($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 'que.php';
$message_queue_key= ftok(__FILE__, 'a');
$message_queue= msg_get_queue($message_queue_key, 0666);
$queue_obj = new MsgQueue($message_queue);
$pid = pcntl_fork();
if($pid>0){//主进程入列
	    while(1){
		            $msg = $queue_obj->push((array('a'=>321312,'v'=>'casd')));
			            sleep(2);
			        }
					
}else{//子进程出列
	
            while (1) {
                $message = $queue_obj->pop();
                if ($message !== false) {
                    var_dump($message);
                }
                sleep(1);
            }
}

跨进程通信A和B。这个时候ipc仅仅相当于一个普通队列

生产者

<?php
include_once 'que.php';

$message_queue_key = ftok(__FILE__, 'a');
$message_queue = msg_get_queue($message_queue_key, 0666);
$queue_obj = new MsgQueue($message_queue);

while (true) {
    $msg = array('a' => 321312, 'v' => 'casd');
    $queue_obj->push($msg);
    echo "Sent message: " . print_r($msg, true) . "\n";
    sleep(1); // 等待一段时间再发送下一条消息
}

消费者

<?php
include_once 'que.php';

$message_queue_key = ftok(__FILE__, 'a');
$message_queue = msg_get_queue($message_queue_key, 0666);
$queue_obj = new MsgQueue($message_queue);

while (true) {
    $message = $queue_obj->pop();
    if ($message !== false) {
        echo "Received message: " . print_r($message, true) . "\n";
    }
    sleep(2); // 等待一段时间再处理下一条消息
}

标签:ipc,type,queue,间通信,msg,message,PHP,data,public
From: https://www.cnblogs.com/qcy-blog/p/18414276

相关文章

  • PHP在现代Web开发中的高效应用与最佳实践
    PHP在现代Web开发中的高效应用与最佳实践在快速迭代的Web开发领域,PHP作为一门历史悠久且广泛应用的服务器端脚本语言,始终保持着其独特的魅力和强大的生命力。从简单的动态网页到复杂的企业级应用,PHP凭借其易学性、丰富的库支持和广泛的社区资源,成为了众多开发者的首选。本......
  • 进程间通信-管道
    管道管道的由来:不同进程对于同一文件的读写时,进程一对文件读的时候,进程二需要等到进程一读完关闭文件,进程二再打开进行相应的操作;而管道却可以实现多个进程对同一文件边读边写;无名管道PIPE特征没有名字,无法使用open()(可以使用read\write)只能用于亲缘进程(父子进程、兄弟进......
  • 基于php+mysql开发制作的全景在线制作网站源码系统 附带完整的安装代码包以及搭建部署
    系统概述本系统是一款集全景图片上传、编辑、展示于一体的综合性解决方案。采用PHP作为后端开发语言,结合MySQL数据库的强大功能,实现了高效稳定的数据处理与存储。前端则运用了HTML5、CSS3及JavaScript等现代Web技术,确保跨浏览器兼容性和良好的用户体验。通过简洁明了的操作界......
  • 参数绑定在PHP代码测试中的重要作用与应用场景
    在PHP代码测试过程中,参数绑定起着至关重要的作用。它不仅能够提高代码的安全性,还能够优化性能,减少常见的错误。因此,了解参数绑定的作用以及其应用场景,对于开发者来说十分重要。参数绑定主要的作用之一就是防止SQL注入。SQL注入是数据库安全中常见的攻击方式之一,攻击者通过在SQL语......
  • php短视频系统,提升系统健壮性离不开重试机制
    php短视频系统,提升系统健壮性离不开重试机制随着互联网的发展php短视频系统中的业务功能越来越复杂,有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务,但是远程服务的健壮性和网络稳定性都是不可控因素。在测试阶段可能没有什么异常情况,但p......
  • PbootCMS访问页面出现PHP Fatal error: Allowed memory size of 13421
    当访问PbootCMS页面时出现 PHPFatalerror:Allowedmemorysizeof13421 的错误,通常是由于PHP的内存限制过低导致的。这个错误表明PHP脚本在运行过程中耗尽了分配给它的内存。解决方案增加PHP内存限制检查PHP配置文件(php.ini)在脚本中动态增加内存限制详......
  • 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?
    PHP,全称“PHP:HypertextPreprocessor”,是一种开源的服务器端脚本语言,主要用于网页开发,能够产生动态交互性数据。它由RasmusLerdorf在1994年创建,并随着时间的推移不断更新迭代,以适应互联网技术的发展。为什么使用PHP?开源免费:PHP作为一个开源项目,用户可以免费使用,这大大降低......
  • 【漏洞复现】NUUO网络视频录像机 css_parser.php 任意文件读取
            NUUO网络视频录像机(NetworkVideoRecorder,简称NVR)是NUUOInc.生产的一种专业视频监控设备,它广泛应用于零售、交通、教育、政府和银行等多个领域。能够同时管理多个IP摄像头,实现视频录制、存储、回放及远程监控等功能。它采用先进的视频处理技术,提供高清、流畅......
  • A-计算机毕业设计定制:93904 家庭健康管理系统(免费领源码)可做计算机毕业设计JAVA、PHP
    摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,家庭健康管理系统被用户普遍使用,为方便用户能够可以随时进行家庭健康管理系统的数据信息管理,特开发了SSM家庭健康管理系......
  • PHP产生一个唯一ID
    在PHP中,生成唯一ID的方式有很多,取决于你的使用场景和要求。以下是几种常见的方法:1.使用uniqid()uniqid()是PHP内置函数,可以根据微秒时间生成唯一ID。你可以传递一个前缀,并且使用true来获取更高精度的唯一ID。示例:$id=uniqid();//基于当前时间生成唯一IDecho......