天天看點

System V 消息隊列—複用消息

  消息隊列中的消息結構可以由我們自由定義,具備較強的靈活性。通過消息結構可以共享一個隊列,進行消息複用。通常定義一個類似如下的消息結構:

System V 消息隊列—複用消息
System V 消息隊列—複用消息

 消息結構相關聯的類型字段(msg_type)提供了兩個特性:

(1)辨別消息,使得多個程序在單個隊列上複用消息。

(2)用作優先級字段,允許接收者以不同于先進先出的某個順序讀出各個消息。

例子1:每個應用一個隊列,可以在多個客戶和單個伺服器之間複用消息。使用一個消息隊列進行通信,由消息類型辨別消息是從客戶到伺服器,還是伺服器到客戶。通信模型如下:

System V 消息隊列—複用消息

按照通信模型編寫程式如下:

公共頭檔案svmsg.h

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

用戶端程式sysv_client.c

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

伺服器程式sysv_server.c

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

程式測試結果如下所示:

System V 消息隊列—複用消息

 例子2:每個客戶一個隊列,将例子1改成所有使用者用一個共同的消息隊列向伺服器發送消息,給每個客戶配置設定一個消息隊列,使得伺服器對每個客戶進行應答。通信模型如下:

System V 消息隊列—複用消息

以并發伺服器模型編寫這個程式,伺服器給每個客戶fork一個子程序進行處理。程式如下:

公共頭檔案svmsg.h和svmsg.c:

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

用戶端程式如下:

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

伺服器程式如下:

System V 消息隊列—複用消息
System V 消息隊列—複用消息
System V 消息隊列—複用消息

程式測試結果如下:

System V 消息隊列—複用消息