如果我使用UDP套接字进行进程间通信,我可以期望其他进程以相同的顺序接收所有发送数据吗?
我知道UDP通常不是这样.
不,我以前一直被这个咬过.您可能想知道它可能会如何失败,但是您将遇到挂起的数据包缓冲区问题,因此数据包将被丢弃.网络子系统如何丢弃数据包取决于实现,而不是在任何地方指定.
简而言之,没有.您不应该对UDP套接字上收到的数据顺序做任何假设,即使是在localhost上也是如此.它可能会起作用,也可能不起作用,并且不能保证.
不,即使使用本地插座,也没有这样的保证.如果您想要一个IPC机制来保证按顺序交付,您可能会考虑使用全双工管道popen()
.这将打开子进程的管道,可以任意读取或写入.它将保证按顺序交付,并可与同步或异步I/O(select()
或poll()
)一起使用,具体取决于您希望如何构建应用程序.
在unix上还有其他选项,例如unix域套接字或System V消息队列(其中一些可能更快)但是从管道读取/写入非常简单且有效.作为奖励,它很容易测试您的服务器进程,因为它只是从Stdio读取和写入.
在Windows上你可以查看命名管道,它的工作方式与它们的unix同名有些不同,但它们恰好用于这种进程间通信.