天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP下操作Linux消息隊列完成進程間通信的方法

關于Linux系統進程通信的概念及實現可查看:http://www.ibm.com/developerworks/cn/linux/l-ipc/
  關于Linux系統消息隊列的概念及實現可查看:http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/
  php的sysvmsg模塊是對Linux系統支持的System V IPC中的System V消息隊列函數族的封裝。我們需要利用sysvmsg模塊提供的函數來進進程間通信。先來看一段示例代碼_1:
復制代碼 代碼如下:
<?php
$message_queue_key = ftok(__FILE__, 'a');
$message_queue = msg_get_queue($message_queue_key, 0666);
var_dump($message_queue);
$message_queue_status = msg_stat_queue($message_queue);
print_r($message_queue_status);
//向消息隊列中寫
msg_send($message_queue, 1, "Hello,World!");
$message_queue_status = msg_stat_queue($message_queue);
print_r($message_queue_status);
//從消息隊列中讀
msg_receive($message_queue, 0, $message_type, 1024, $message, true, MSG_IPC_NOWAIT);
print_r($message."/r/n");
msg_remove_queue($message_queue);
?>

這段代碼的運行結果如下:
復制代碼 代碼如下:
resource(4) of type (sysvmsg queue)
Array
(
[msg_perm.uid] => 1000
[msg_perm.gid] => 1000
[msg_perm.mode] => 438
[msg_stime] => 0
[msg_rtime] => 0
[msg_ctime] => 1279849495
[msg_qnum] => 0
[msg_qbytes] => 16384
[msg_lspid] => 0
[msg_lrpid] => 0
)
Array
(
[msg_perm.uid] => 1000
[msg_perm.gid] => 1000
[msg_perm.mode] => 438
[msg_stime] => 1279849495
[msg_rtime] => 0
[msg_ctime] => 1279849495
[msg_qnum] => 1
[msg_qbytes] => 16384
[msg_lspid] => 2184
[msg_lrpid] => 0
)
Hello,World!

可以看到已成功從消息隊列中讀取“Hello,World!”字符串
  下面列舉一下示例代碼中的主要函數:
復制代碼 代碼如下:
ftok ( string $pathname , string $proj )
手冊上給出的解釋是:Convert a pathname and a project identifier to a System V IPC key。這個函數返回的鍵值唯一對應linux系統中一個消息隊列。在獲得消息隊列的引用之前都需要調用這個函數。
msg_get_queue ( int $key [, int $perms ] )
msg_get_queue()會根據傳入的鍵值返回一個消息隊列的引用。如果linux系統中沒有消息隊列與鍵值對應,msg_get_queue()將會創建一個新的消息隊列。函數的第二個參數需要傳入一個int值,作為新創建的消息隊列的權限值,默認為0666。這個權限值與linux命令chmod中使用的數值是同一個意思,因為在linux系統中一切皆是文件。
msg_send ( resource $queue , int $msgtype , mixed $message [, bool $serialize [, bool $blocking [, int &$errorcode ]]] )
顧名思義,該函數用來向消息隊列中寫數據。
msg_stat_queue ( resource $queue )
這個函數會返回消息隊列的元數據。消息隊列元數據中的信息很完整,包括了消息隊列中待讀取的消息數、最后讀寫隊列的進程ID等。示例代碼在第8行調用該函數返回的數組中隊列中待讀取的消息數msg_qnum值為0。
msg_receive ( resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize , mixed &$message [, bool $unserialize [, int $flags [, int &$errorcode ]]] )
msg_receive用于讀取消息隊列中的數據。
msg_remove_queue ( resource $queue )
msg_remove_queue用于銷毀一個隊列。

示例代碼_1只是展示了php操作消息隊列函數的應用。下面的代碼具體描述了進程間通信的場景
復制代碼 代碼如下:
<?php
$message_queue_key = ftok(__FILE__, 'a');
$message_queue = msg_get_queue($message_queue_key, 0666);
$pids = array();
for ($i = 0; $i < 5; $i++) {
//創建子進程
$pids[$i] = pcntl_fork();
if ($pids[$i]) {
echo "No.$i child process was created, the pid is $pids[$i]/r/n";
} elseif ($pids[$i] == 0) {
$pid = posix_getpid();
echo "process.$pid is writing now/r/n";
msg_send($message_queue, 1, "this is process.$pid's data/r/n");
posix_kill($pid, SIGTERM);
}
}
do {
msg_receive($message_queue, 0, $message_type, 1024, $message, true, MSG_IPC_NOWAIT);
echo $message;
//需要判斷隊列是否為空,如果為空就退出
//break;
} while(true)
?>

運行結果為:
復制代碼 代碼如下:
No.0 child process was created, the pid is 5249
No.1 child process was created, the pid is 5250
No.2 child process was created, the pid is 5251
No.3 child process was created, the pid is 5252
No.4 child process was created, the pid is 5253
process.5251 is writing now
this is process.5251's data
process.5253 is writing now
process.5252 is writing now
process.5250 is writing now
this is process.5253's data
this is process.5252's data
this is process.5250's data
process.5249 is writing now
this is process.5249's data

這段程序每次的運行結果都會不同,這正說明了多進程的異步性。從結果也能看出消息隊列FIFO特性。
以上便是我研究的一點心得。接下來將會繼續研究php利用信號、socket等進行進程間通信的方法。

php技術PHP下操作Linux消息隊列完成進程間通信的方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久精品中文闷骚内射 | 日本电影小姐 | 激情内射亚洲一区二区三区爱妻 | 5566av资源 | 久久婷婷电影网 | 激情内射亚洲一区二区三区爱妻 | 三级黄色在线视频中文 | 92电影网午夜福利 | 男人和女人一级黄色大片 | 国产精品久久国产三级国不卡顿 | 亚洲欧美日本久久综合网站 | 婷婷综合亚洲爱久久 | 日本精品久久久久中文字幕2 | 国产看黄网站又黄又爽又色 | 花蝴蝶高清观看免费 | 办公室丝袜老师在线观看 | 一本之道高清在线观看免费 | 国产午夜三区视频在线 | 四房色播手机版 | 俄罗斯兽交XXXXX在线 | 精品久久久亚洲精品中文字幕 | 亚洲欧美日韩中字视频三区 | 中文字幕乱码在线人视频 | 伊人久久大香线蕉综合电影网 | 国产偷国产偷亚洲高清app | 91精品国产91热久久p | 麻豆出品国产AV在线观看 | 成人国产AV精品久久久久 | 特级毛片AAAAAA | 免费在线视频成人 | 亚洲精品婷婷无码成人A片在线 | 亚洲精品入口一区二区乱麻豆精品 | 8090碰成年女人免费碰碰尤物 | 亚洲精品国产A久久久久久 亚洲精品国产AV成人毛片 | a视频免费在线观看 | 青青草原国产 | 99久久亚洲精品影院 | 夜夜国产亚洲视频香蕉 | 亚洲伊人成综合人影院 | 亚洲视频 在线观看 | 亚洲精品无码专区在线播放 |