内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
使用POSIX消息队列或Unix域socket进行本地IPC通信更好吗?
发送端的基本逻辑是:
connect to server send request note if the send worked or not disconnect from server
一个服务器可以有数百个客户端。
我们正在运行Linux操作系统的SMP系统(4-8核)上执行。
Unix域socket不必在TIME_WAIT
-类似的状态,因为这一等待时间是用来防止连接中的丢包仍然在因特网上徘徊的情况。这种担心在当地并不适用。
Unix域socket可以是SOCK_STREAM
(如TCP)或SOCK_DGRAM
(与UDP一样),通过添加保证UNIX域数据报套接字是可靠的,并且不重新排序数据报。
如果你愿意的话,你仍然需要某种ACK(即使是TCP)。你的另一个应用程序读取了发送的消息;毕竟,即使send()
成功了,它可能在有机会处理消息之前就崩溃了。(这也适用于消息队列---为了确保消息不会丢失,接收应用程序必须将请求写入日志,将请求刷新到磁盘,然后发送回确认)。
我同意这个选择本质上是编程熟悉程度的问题。