消息隊列中的消息結構可以由我們自由定義,具備較強的靈活性。通過消息結構可以共享一個隊列,進行消息複用。通常定義一個類似如下的消息結構:
消息結構相關聯的類型字段(msg_type)提供了兩個特性:
(1)辨別消息,使得多個程序在單個隊列上複用消息。
(2)用作優先級字段,允許接收者以不同于先進先出的某個順序讀出各個消息。
例子1:每個應用一個隊列,可以在多個客戶和單個伺服器之間複用消息。使用一個消息隊列進行通信,由消息類型辨別消息是從客戶到伺服器,還是伺服器到客戶。通信模型如下:
按照通信模型編寫程式如下:
公共頭檔案svmsg.h
用戶端程式sysv_client.c
伺服器程式sysv_server.c
程式測試結果如下所示:
例子2:每個客戶一個隊列,将例子1改成所有使用者用一個共同的消息隊列向伺服器發送消息,給每個客戶配置設定一個消息隊列,使得伺服器對每個客戶進行應答。通信模型如下:
以并發伺服器模型編寫這個程式,伺服器給每個客戶fork一個子程序進行處理。程式如下:
公共頭檔案svmsg.h和svmsg.c:
用戶端程式如下:
伺服器程式如下:
程式測試結果如下: