天天看点

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 消息队列—复用消息