visual - winsock udp select




通過同一台機器上的UDP套接字發送數據是否可靠? (4)

Loopback UDP在許多平台上都非常不可靠,您可以輕鬆看到50%以上的數據丟失。 已經給出了各種藉口,即有更好的運輸機制可供使用。

目前有許多中間件堆棧可以使IPC更易於使用和跨平台。 看看ZeroMQ29 West的LBM ,它們使用相同的API進行進程內,進程間(IPC)和網絡通信。

如果我使用UDP套接字進行進程間通信,我可以期望其他進程以相同的順序接收所有發送數據嗎?

我知道UDP通常不是這樣。


不,即使使用本地插座,也沒有這樣的保證。 如果您想要一個可以保證按順序交付的IPC機制,您可以考慮使用帶有popen()的全雙工管道。 這將打開一個子進程的管道,可以任意讀取或寫入。 它將保證按順序交付,並可與同步或異步I / O( select()poll() )一起使用,具體取決於您希望如何構建應用程序。

在unix上還有其他選項,例如unix域套接字或System V消息隊列(其中一些可能更快)但是從管道讀取/寫入非常簡單且有效。 作為獎勵,它很容易測試您的服務器進程,因為它只是從Stdio讀取和寫入。

在Windows上你可以查看命名管道,它的工作方式與它們的unix同名有些不同,但它們恰好用於這種進程間通信。


套接字接口可能不會控制數據的發起者,因此如果你有更高級別的流量控制,你可能會看到可靠的傳輸,但是內存緊縮仍然可能導致數據報丟失。

如果沒有流量控制限制數據報的內核內存分配,我想它將與網絡UDP一樣不可靠。


總之,沒有。 您不應該對UDP套接字上收到的數據順序做任何假設,即使是在localhost上也是如此。 它可能會起作用,也可能不起作用,並且不能保證。







winsock