php 消息隊列


 

本消息隊列用於linux下,進程通信

 

#根據路徑和后綴創建一個id
$key = ftok(__DIR__, 'R');

#獲取隊列中的消息
$q = msg_get_queue($key);

#刪除隊列
msg_remove_queue($q);

#獲取隊列的狀態信息
$status = msg_stat_queue($q);

print_r($status);
echo "\n";

for($i=0;$i<100;$i++)
{
    /**
     * 向隊列里添加消息 
     *  resource $queue , int $msgtype , mixed $message [, bool $serialize = true [, bool $blocking = true [, int &$errorcode ]]]
     * $msgtype :消息的類型
     * $message : 具體的數據
     * $serialize:是否要序列化
     * $blocking: 是否阻塞 , 當隊列中滿時,會進行阻塞,設為非阻塞會產生一個 MSG_EAGAIN 的 錯誤消息
     */
    $flag = msg_send($q, 111, array('a'=>1), true, false , $errorcode);
    
    var_dump($errorcode);
}

/**
接收消息
 resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize , mixed &$message [, bool $unserialize = true [, int $flags = 0 [, int &$errorcode ]]] 
 $desiredmsgtype:0表示從隊列最前面開始返回數據, bigger 0:具體的某個隊列
 $maxsize:數據最大值,獲取的消息如果》此值則出錯
 $msgtype:消息的具體類型, 因為$desiredmsgtype可以不指定類型,即指定為0
 $flags:MSG_IPC_NOWAIT  如果隊列為空直接返回(不阻塞),  MSG_EXCEPT MSG_NOERROR 參見手冊
 */
$data = msg_receive($q, 0, $type, 200, $msg);
var_dump($data);
echo "\n";

var_dump($type);
echo "\n";

var_dump($msg);
echo "\n";

 

隊列狀態信息:具體參考手冊

Array
(

[msg_perm.uid] => 1015

[msg_perm.gid] => 100

[msg_perm.mode] => 438

[msg_stime] => 0

[msg_rtime] => 0

[msg_ctime] => 1411830331

[msg_qnum] => 0

[msg_qbytes] => 65536

[msg_lspid] => 0

[msg_lrpid] => 0

)

 linux下 用 ipc命令查看 ,用 ipcrm 命令可以刪除

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM