linux c 信号量与共享内存问题 多客户端同时接受消息 5
服务端与客户端实现共享内存与信号量自锁解锁功能3个锁客户端与服务端锁,还有p,v锁;但是出现只能单客户端发,单客户端接受;如果多客户端等待接受,就是一个一个客户端收到消息...
服务端与客户端实现共享内存 与信号量 自锁解锁功能 3个锁 客户端与服务端锁 ,还有p,v锁;但是出现只能单客户端发,单客户端接受;如果多客户端等待接受,就是一个一个客户端收到消息;应实现 多客户端同时接受到消息;有什么好的办法?
展开
1个回答
展开全部
假设服务器的守护进程为D,D维护着一张广播链表。假设链表元素为
struct BEntry{
pid_t pid; //服务器子进程id
mqd_t mqd; //消息队列描述符或者其他IPC手段也可以
};
每次有客户端连上来,做fork的时候就把IPC手段建立好,不管用管道,或者消息,或者共享内存都大同小异,设客户端连上来fork产生的服务器子进程为Subn n为下标。
然后如果要广播消息,就让Subn通知D(可以用广播链表里的IPC手段,也可以另建),然后由D广播消息给各个Subm, Subx,这些Sub进程再发给客户端,这样可以同时广播,效率比较高。
struct BEntry{
pid_t pid; //服务器子进程id
mqd_t mqd; //消息队列描述符或者其他IPC手段也可以
};
每次有客户端连上来,做fork的时候就把IPC手段建立好,不管用管道,或者消息,或者共享内存都大同小异,设客户端连上来fork产生的服务器子进程为Subn n为下标。
然后如果要广播消息,就让Subn通知D(可以用广播链表里的IPC手段,也可以另建),然后由D广播消息给各个Subm, Subx,这些Sub进程再发给客户端,这样可以同时广播,效率比较高。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询