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

PHP 訊息佇列實作:Linux 進程通訊指南

     編輯:PHP 綜合知識

簡介

System V 訊息佇列提供進程間非同步通訊機制,適用於 Linux 環境。PHP 透過 msg_* 系列函式操作佇列。

基本操作流程

$key = ftok(__DIR__, 'R');          // 產生鍵值
$q = msg_get_queue($key);           // 取得/建立佇列

// 發送訊息
for ($i = 0; $i < 100; $i++) {
    $flag = msg_send($q, 111, ['a' => 1], true, false, $errorcode);
    var_dump($errorcode);
}

// 接收訊息
$data = msg_receive($q, 0, $type, 200, $msg);
var_dump($data, $type, $msg);

// 移除佇列
msg_remove_queue($q);

關鍵參數說明

  • msg_send:$msgtype 為訊息類型(大於 0),$serialize 預設序列化,$blocking 控制佇列滿時是否阻塞。
  • msg_receive:$desiredmsgtype=0 表示取隊首訊息,$maxsize 限制最大長度,$flags 可設 MSG_IPC_NOWAIT 非阻塞模式。

佇列狀態檢視

$status = msg_stat_queue($q);
print_r($status);
/* 輸出範例:
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> 刪除。

應用場景

  • 任務分發:主進程將工作推入佇列,多個工作者進程消費。
  • 進程解耦:生產者與消費者獨立部署,透過佇列傳遞資料。
  • 非同步處理:將耗時操作(如發送郵件、產生報表)放入佇列背景執行。

注意事項

  1. 佇列大小受系統限制(msg_qbytes),需依負載調整核心參數。
  2. 訊息內容建議序列化(預設開啟),跨語言時可用 JSON。
  3. 妥善處理 msg_send 的 $errorcode,避免阻塞導致進程卡死。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved