Java 什么';与数据报套接字相比,使用数据报通道的优势是什么

Java 什么';与数据报套接字相比,使用数据报通道的优势是什么,java,sockets,io,udp,nio,Java,Sockets,Io,Udp,Nio,我试图优化UDP服务器以处理更多吞吐量,它基于JavaIO数据报套接字(而不是NIO)。 当此UDP服务器接收到UDP数据包时,它需要处理该数据包,并将处理后的数据发送到后台资源,然后响应客户端。 当前,此服务器将为每个要处理的传入数据包分配一个线程 我读过一些文章,我明白这一点 在某些情况下,例如,基于TCP的聊天服务器: 这需要同时管理数千个打开的连接,每个连接只发送少量数据,在NIO中实现服务器可能是一个优势。 很少有线程可以处理大量连接(每个请求一个线程),因为在给定的时间点只有少数连接

我试图优化UDP服务器以处理更多吞吐量,它基于JavaIO数据报套接字(而不是NIO)。 当此UDP服务器接收到UDP数据包时,它需要处理该数据包,并将处理后的数据发送到后台资源,然后响应客户端。 当前,此服务器将为每个要处理的传入数据包分配一个线程

我读过一些文章,我明白这一点 在某些情况下,例如,基于TCP的聊天服务器: 这需要同时管理数千个打开的连接,每个连接只发送少量数据,在NIO中实现服务器可能是一个优势。 很少有线程可以处理大量连接(每个请求一个线程),因为在给定的时间点只有少数连接向服务器发送请求。因此,我们不需要为每个连接维护一个线程。 这是使用JavaTCPNIO的巨大优势

而在UDP中,每个数据包(数据报)实际上是一个自包含的消息,每个数据包都可以被视为一个请求,即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程

那么,使用NIO数据报通道的优势是什么

即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程

为什么??如果你是回音服务器,时间服务器。。。这完全取决于你在做什么

<> p>您可以考虑每个客户机的线程,而不是每个请求,如果您的应用程序是这样的,cliclin不断请求(与一个镜头请求相反:例如时间或DNS)。 你的假设经不起推敲

然而,NIO确实卖过头了,而且大多数应用程序都不需要它。在阻塞模式下,服务器支持成千上万的连接

即使我们使用NIO数据报通道,我们仍然需要为每个请求创建一个线程

为什么??如果你是回音服务器,时间服务器。。。这完全取决于你在做什么

<> p>您可以考虑每个客户机的线程,而不是每个请求,如果您的应用程序是这样的,cliclin不断请求(与一个镜头请求相反:例如时间或DNS)。 你的假设经不起推敲


然而,NIO确实卖过头了,而且大多数应用程序都不需要它。有很多服务器在阻塞模式下支持成千上万的连接。

感谢EJP的回复!该服务器既不是回显服务器,也不是时间服务器。当此UDP服务器接收到UDP数据包时,它需要处理该数据包,并将处理后的数据发送到后台MQ,然后响应客户端。当前,此服务器为每个传入的UDP数据包创建一个新线程来处理它。我的问题是,如果我们使用NIO数据报通道,优势和区别是什么。根据您的描述,很少或没有。感谢EJP的回复!该服务器既不是回显服务器,也不是时间服务器。当此UDP服务器接收到UDP数据包时,它需要处理该数据包,并将处理后的数据发送到后台MQ,然后响应客户端。当前,此服务器为每个传入的UDP数据包创建一个新线程来处理它。我的问题是,如果我们使用NIO数据报通道,优势和区别是什么。根据您的描述,很少或根本没有。