使用专用的 DatagramSockets 发送和接收 UDP 数据报是否有(性能)优势?
Is there a (performance) benefit in having dedicated DatagramSockets for sending and receiving UDP datagrams?
我有一些数据报套接字,一个用于输入,另一个用于不同端口的输出。这样做有什么理由吗?是为了获得最佳性能?
| <- Receiver, accept and accumulate some packets received from client
| <-> Proccess, request packets from Receiver, process and put some response into Sender
| -> Sender, just immediate send
我正在考虑合并 Receiver 和 Sender 并使用一个套接字。
Receiver和Sender是一些模块。它们可以在程序的其他部分进行初始化(例如,通过网络在其他模块之间进行通信)。
没有性能优势,因为两个插槽的数据传输速度或数量不会比一个插槽快。
使用不同的 udp 套接字接收和发送还有其他充分的理由,与应用程序协议的设计方式和可靠性有关。
每个套接字都有自己的发送和接收缓冲区。如果这些缓冲区中的任何一个变满,数据包将被丢弃。换句话说,将单个套接字用于多种用途可能会增加丢包的风险。
此外,对于不同的套接字,您可以使用不同的本地端口。不同本地端口的好处是它为您提供了一种简单的方法来处理不同客户端的单独数据包流。你可以在TFTP协议的设计中看到这样的例子https://en.m.wikipedia.org/wiki/Trivial_File_Transfer_Protocol
我有一些数据报套接字,一个用于输入,另一个用于不同端口的输出。这样做有什么理由吗?是为了获得最佳性能?
| <- Receiver, accept and accumulate some packets received from client
| <-> Proccess, request packets from Receiver, process and put some response into Sender
| -> Sender, just immediate send
我正在考虑合并 Receiver 和 Sender 并使用一个套接字。 Receiver和Sender是一些模块。它们可以在程序的其他部分进行初始化(例如,通过网络在其他模块之间进行通信)。
没有性能优势,因为两个插槽的数据传输速度或数量不会比一个插槽快。
使用不同的 udp 套接字接收和发送还有其他充分的理由,与应用程序协议的设计方式和可靠性有关。
每个套接字都有自己的发送和接收缓冲区。如果这些缓冲区中的任何一个变满,数据包将被丢弃。换句话说,将单个套接字用于多种用途可能会增加丢包的风险。
此外,对于不同的套接字,您可以使用不同的本地端口。不同本地端口的好处是它为您提供了一种简单的方法来处理不同客户端的单独数据包流。你可以在TFTP协议的设计中看到这样的例子https://en.m.wikipedia.org/wiki/Trivial_File_Transfer_Protocol