在本地进程间通信(IPC)中,使用POSIX消息队列还是Unix域套接字更好?
我曾经使用Unix套接字在不同机器之间进行过工作,并且记得建立和断开连接会导致套接字在最终消失之前会残留一段时间。此外,如果您想要一个“可靠”的交换,您要么必须使用TCP,要么就要设计应用程序返回一个ACK。但我不确定这是否也适用于Unix域套接字。
在我的当前项目中,我们需要进行本地IPC。我的第一反应是使用POSIX MQueues,因为我之前已经用过它们进行本地消息传递。然而,我的同事建议使用Unix域套接字。
其中一个比另一个更好,还是只是取决于编程熟练程度?或者可能取决于正在创建的应用程序?
从大局来看,我们正在开发的应用程序遵循客户端/服务器模型。客户端向服务器发送消息以“执行某些操作”。然而,客户端不会等待“完成”的响应--尽管他们确实想知道他们的请求是否已被接收。
发送方的基本逻辑是:
connect to server
send request
note if the send worked or not
disconnect from server
一个服务器可以连接上数百个客户端。
我们正在运行Linux操作系统的SMP系统上(4-8个核心)执行。
提前致谢。
mq_*
函数是新的POSIX接口:“首次发布于第5版。包括与POSIX实时扩展的对齐。”然而,POSIX并没有定义使用poll()
与“消息队列描述符”的用法... :( - Dummy00001