首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP System V 消息隊列實戰:進程間通訊完整範例

     編輯:PHP 相關知識

PHP System V 消息隊列實戰:進程間通訊完整範例

PHP 的 System V IPC 擴展提供 msg_* 系列函數,支援在 Linux 環境下進行進程間通訊(IPC)。本文示範建立隊列、發送/接收訊息、查詢狀態與清理資源的完整流程。

核心函數速覽

  • ftok(path, proj):依路徑與專案 ID 產生唯一鍵值
  • msg_get_queue(key):建立或取得訊息隊列資源
  • msg_send(queue, type, msg, serialize, blocking, &errorcode):發送訊息
  • msg_receive(queue, desired_type, &msg_type, max_size, &message, unserialize, flags, &errorcode):接收訊息
  • msg_stat_queue(queue):取得隊列狀態資訊
  • msg_remove_queue(queue):移除隊列

完整範例代碼

<?php
// 1. 產生 IPC 鍵值
$key = ftok(__DIR__, 'R');

// 2. 取得/建立隊列
$queue = msg_get_queue($key);

// 3. 查看初始狀態
$status = msg_stat_queue($queue);
print_r($status);
echo "\n";

// 4. 發送 100 條測試訊息(非阻塞模式)
for ($i = 0; $i < 100; $i++) {
    $flag = msg_send($queue, 111, ['a' => 1], true, false, $errorcode);
    var_dump($errorcode);
}

// 5. 接收第一條訊息(desired_type=0 表示取隊首)
$data = msg_receive($queue, 0, $type, 200, $msg);
var_dump($data); echo "\n";
var_dump($type); echo "\n";
var_dump($msg); echo "\n";

// 6. 清理(示範用,實際視業務而定)
// msg_remove_queue($queue);
?>

隊列狀態輸出範例

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 指令管理

  • ipcs -q:查看系統現有訊息隊列
  • ipcrm -q <msqid>:手動刪除指定隊列

延伸閱讀

  • PHP + Memcache 實現消息隊列案例分享
  • PHP 操作 Linux 消息隊列完成進程間通訊的方法
  • PHP 實現的 Memcache 環形隊列類實例
  • PHP 中使用 Redis 隊列操作實例代碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved