<?php
  $MSGKEY = 519052;
  $msg_id = msg_get_queue ($MSGKEY, 0600);
  if (!msg_send ($msg_id, 1, 'AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH', false, true, $msg_err))
    echo "Msg not sent because $msg_err\n";
  if (msg_receive ($msg_id, 1, $msg_type, 10240, $msg, false, 0, $msg_error)) {
    echo "$msg\n";
  } else {
    echo "Received $msg_error fetching message\n";
    break;
  }
  msg_remove_queue ($msg_id);
?>

注:wamp环境下缺少三个dll文件,运行时提示方法未定义,可装个linux虚拟机来测试。




请求要及时处理,否则请求太多影响Apache的运行。

请求处理代码如下:

<?php
    //负责创建消息队列的key
    $message_queue_key = ftok(MsgQueue::MSGPATH."$MSGKEY", 'a');       
    //通过key来创建消息队列
    $message_queue = msg_get_queue($message_queue_key, 0666);          
    //获得队列状态信息,包括队列中还有多少消息未读等信息
    $message_queue_status = msg_stat_queue($message_queue);            
    //echo $message_queue_status["msg_qnum"];die;
    for($j=0;$j<$message_queue_status["msg_qnum"];$j++){
        msg_receive($message_queue,1, $message_type, 10240, $message, false, MSG_IPC_NOWAIT,$error);
        msg_remove_queue ($message_queue);
    }
?>