簡介
“訊息”是在兩台計算機間傳送的數據單位。訊息可以非常簡單,例如只包含文本字符串;也可以更複雜,可能包含嵌入對象。訊息被傳送到佇列中。“訊息佇列”是在訊息的傳輸過程中保存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它。
訊息處理技術
“訊息佇列”是 Microsoft 的訊息處理技術,它在任何安裝 Microsoft Windows 的計算機組合中,為任何應用程式提供訊息處理和訊息佇列功能,無論這些計算機是否在同一個網路上或者是否同時在線上。“訊息佇列網路”是能夠相互間來回傳送訊息的任何一組計算機。網路中的不同計算機在確保訊息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何傳送訊息,有些保存整個網路的重要信息,而有些只是傳送和接收訊息。
“訊息佇列”安裝期間,管理員確定哪些伺服器可以互相通信,並設定特定伺服器的特殊角色。構成此“訊息佇列”網路的計算機稱為“站點”,它們之間通過“站點連結”相互連線。每個站點連結都有一個關聯的“開銷”,它由管理員確定,指示了經過此站點連結傳遞訊息的頻率。
管理員
“訊息佇列”管理員還在網路中設定一台或多台作為“路由伺服器”的計算機。路由伺服器查看各站點連結的開銷,確定經過多個站點傳遞訊息的最快和最有效的方法,以此決定如何傳遞訊息。訊息佇列在XP Home(家庭版)中不存在。但是家庭版的XP仍可以訪問網路和組成家庭區域網路。所以根據這一點(等於是微軟Windows官方對XPHome設定)的情況看來,使用nLite將其移除應該沒有問題。但是基於nLite作者在nLite界面中將其標為“紅色”,以nLite作者的博學,我們應該信任他。所以不妨讓它留在我們系統里,頂多是增加一項服務。卻可以感覺到很安然的狀態。
進程間通信
訊息佇列(也叫做報文佇列)能夠克服早期unix通信機制的一些缺點。作為早期unix通信機制之一的信號能夠傳送的信息量有限,後來雖然POSIX 1003.1b在信號的實時性方面作了拓廣,使得信號在傳遞信息量方面有了相當程度的改進,但是信號這種通信方式更像"即時"的通信方式,它要求接受信號的進程在某個時間範圍內對信號做出反應,因此該信號最多在接受信號進程的生命周期內才有意義,信號所傳遞的信息是接近於隨進程持續的概念(process-persistent);管道及有名管道則是典型的隨進程持續IPC,並且,只能傳送無格式的位元組流無疑會給應用程式開發帶來不便,另外,它的緩衝區大小也受到限制。訊息佇列就是一個訊息的鍊表。可以把訊息看作一個記錄,具有特定的格式以及特定的優先權。對訊息佇列有寫許可權的進程可以向訊息佇列中按照一定的規則添加新訊息;對訊息佇列有讀許可權的進程則可以從訊息佇列中讀走訊息。訊息佇列是隨核心持續的。
目前主要有兩種類型的訊息佇列:POSIX訊息佇列以及系統V訊息佇列,系統V訊息佇列目前被大量使用。考慮到程式的可移植性,新開發的應用程式應儘量使用POSIX訊息佇列。
系統V訊息佇列是隨核心持續的,只有在核心重起或者顯式刪除一個訊息佇列時,該訊息佇列才會真正被刪除。因此系統中記錄訊息佇列的數據結構(struct ipc_ids msg_ids)位於核心中,系統中的所有訊息佇列都可以在結構msg_ids中找到訪問入口。 訊息佇列就是一個訊息的鍊表。每個訊息佇列都有一個佇列頭,用結構struct msg_queue來描述。佇列頭中包含了該訊息佇列的大量信息,包括訊息佇列鍵值、用戶ID、組ID、訊息佇列中訊息數目等等,甚至記錄了最近對訊息佇列讀寫進程的ID。讀者可以訪問這些信息,也可以設定其中的某些信息。