gpt4 book ai didi

c++ - 哪个更适合本地 IPC、POSIX 消息队列 (mqueues) 或 Unix 域 (本地) 套接字?

转载 作者:IT老高 更新时间:2023-10-28 21:42:57 25 4
gpt4 key购买 nike

本地 IPC 通信使用 POSIX 消息队列还是 Unix 域套接字更好?

我曾在机器(不是域)之间使用 Unix 套接字,我记得建立和断开连接会导致套接字在最终消失之前逗留一段时间。此外,如果你想要一个“可靠的”交换,你要么必须使用 TCP,要么设计应用程序来返回一个 ACK​​。不过,我不确定这是否也适用于 Unix 域套接字。

在我当前的项目中,我们需要本地 IPC。我的第一 react 是使用 POSIX MQueues,因为我以前用它们来进行本地消息传递。但是,一位同事建议改为使用 Unix 域套接字。

是一个比另一个更好,还是编程熟悉度的问题?或者它可能取决于正在创建的应用程序?

总体而言,我们正在开发的应用程序遵循客户端/服务器模型。客户端向服务器发送消息以“做某事”。但是,客户端不会等待“完成”响应——尽管他们确实想知道他们的请求是否已收到。

发送端的基本逻辑是:

connect to server
send request
note if the send worked or not
disconnect from server

一台服务器可以有数百个客户端。

我们正在运行 Linux 操作系统的 SMP 系统(4-8 核)上执行。

提前致谢。

最佳答案

UNIX 域套接字不必“停留”在类似 TIME_WAIT 的状态,因为该等待时间用于防止来自连接的杂散数据包仍在 Internet 上徘徊。该问题不适用于本地。

UNIX 域套接字可以是 SOCK_STREAM(如 TCP)或 SOCK_DGRAM(如 UDP),另外保证 UNIX 域数据报套接字是可靠的并且不重新排序数据报。

如果您想确定您的其他应用程序已读取您发送的消息,您仍然需要某种 ACK(即使使用 TCP);毕竟,即使 send() 成功了,它也可能在有机会处理消息之前就崩溃了。 (这也适用于消息队列——为了完全确保消息不会丢失,接收应用程序必须将请求写入日志,将其刷新到磁盘,然后发回确认)。

我同意选择本质上是编程熟悉度的问题。

关于c++ - 哪个更适合本地 IPC、POSIX 消息队列 (mqueues) 或 Unix 域 (本地) 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com