一尘不染

Java中的非阻塞UDP I / O与阻塞UDP I / O

java

非阻塞TCP / IP SocketChannelS和Selector在NIO帮我处理与小数目的线程许多TCP / IP连接。但是UDP
DatagramChannels呢?(我必须承认我对UDP不太熟悉。)

即使UDP发送操作DatagramChannel未在阻止模式下运行,它似乎也不会阻止。确实存在DatagramSocket.send(DatagramPacket)因拥堵或类似原因导致阻塞的情况吗?我真的很好奇,是否存在这样的情况以及生产环境中可能存在的情况。

如果DatagramSocket.send(DatagramPacket)实际上并没有阻塞,并且我不打算使用已连接DatagramSocket并仅绑定到一个端口,那么使用非阻塞模式和DatagramChanneland并没有优势Selector


阅读 165

收藏
2020-12-03

共1个答案

一尘不染

自从我使用Java的DatagramSockets,Channels等以来已经有一段时间了,但是我仍然可以为您提供一些帮助。

UDP协议不像TCP那样建立连接。相反,它只是发送数据而忽略它。如果确保数据确实到达那里很重要,那就是客户的责任。因此,即使您处于阻塞模式,您的发送操作也只会在刷新缓冲区所需的时间内阻塞。由于UDP对网络​​一无所知,因此它将尽早将其写出,而无需检查网络速度或它是否真正到达了应该到达的位置。因此,在您看来,该通道似乎实际上已立即准备好进行更多发送。

2020-12-03