PHP的消息通信机制测试实例

5年以前  |  阅读数:549 次  |  编程语言:PHP 

本文实例讲述了PHP的消息通信机制。分享给大家供大家参考,具体如下:


    <?php error_reporting(E_ALL&~E_WARNING&~E_NOTICE);
    /**
     * Example for sending and receiving Messages via the System V Message Queue
     *
     * To try this script run it synchron/asynchron twice times. One time with ?type=send and one time with ?type=receive
     *
     * @author     Thomas Eimers - Mehrkanal GmbH
     *
     * This document is distributed in the hope that it will be useful, but without any warranty;
     * without even the implied warranty of merchantability or fitness for a particular purpose.
     */
    ob_implicit_flush(1);
    header('Content-Type: text/plain; charset=ISO-8859-1');
    echo "Start...\n";
    // Create System V Message Queue. Integer value is the number of the Queue
    //$queue = msg_get_queue(100379);
    $mesg_key = ftok(__FILE__, 'm');
    $mesg_id = msg_get_queue($mesg_key, 0666);
    $queue = $mesg_id;
    // Sendoptions
    $serialize_needed=false; // Must the transfer data be serialized ?
    $block_send=false;    // Block if Message could not be send (Queue full...) (true/false)
    $msgtype_send=1;     // Any Integer above 0. It signeds every Message. So you could handle multible message
                 // type in one Queue.
    // Receiveoptions
    $msgtype_receive=1;    // Whiche type of Message we want to receive ? (Here, the type is the same as the type we send,
                 // but if you set this to 0 you receive the next Message in the Queue with any type.
    $maxsize=100;       // How long is the maximal data you like to receive.
    $option_receive=MSG_IPC_NOWAIT; // If there are no messages of the wanted type in the Queue continue without wating.
                 // If is set to NULL wait for a Message.
    // Send or receive 20 Messages
    for ($i=0;$i<20;$i++) {
       sleep(1);
      ob_flush();
      flush();
     $message='Hello, This is Flandy,now is '.date("H:i:s",time());   // Transfering Data
     // This one sends
      if (isset($_GET['type'])&&$_GET['type']=='send') {
      if(msg_send($queue,$msgtype_send, $message,$serialize_needed, $block_send,$err)===true) {
       echo "The ".$i." Message has been sent, the messge is ".$message."\n";
      } else {
       var_dump($err);
      }
     // This one received
     } else {
       $queue_status=msg_stat_queue($queue);
       echo 'Get Messages in the queue: '.$queue_status['msg_qnum']."\n";
       print_r($queue_status);
       echo "\n";
      if ($queue_status['msg_qnum']>0) {
       if (msg_receive($queue,$msgtype_receive ,$msgtype_erhalten,$maxsize,$daten,$serialize_needed, $option_receive, $err)===true) {
           echo "Received data:".$daten."\n";
       } else {
           var_dump($err);
       }
      }
     }
    }
    ?>

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《php socket用法总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例