TCP/IP SocketChannels y Selector no bloqueantes en NIO me ayudan a manejar muchas conexiones TCP/IP con un número pequeño de subprocesos. Pero ¿qué hay de UDP DatagramChannels? (Debo admitir que no estoy muy familiarizado con UDP.)E/S UDP no bloqueante frente a E/S UDP bloqueante en Java
Las operaciones de envío UDP no parecen bloquearse incluso si el DatagramChannel no está operando en modo de bloqueo. ¿Hay realmente un caso donde DatagramSocket.send (DatagramPacket) bloquea debido a la congestión o algo similar? Tengo mucha curiosidad si existe un caso así y cuáles son los posibles casos en un entorno de producción.
Si DatagramSocket.send (DatagramPacket) en realidad no bloquea y no voy a usar un DatagramSocket conectado y enlazar a un solo puerto, ¿no hay ninguna ventaja de utilizar el modo no-bloqueo con DatagramChannel y Selector?
¿Qué pasaría si el buffer del kernel es inundado por escrituras demasiado rápidas en un socket UDP? – trustin
Su escritura (de nivel de usuario) se bloquearía hasta que el núcleo se vacíe y los sockets envíen el búfer. – JLR
Por lo tanto, existe una diferencia obvia entre sockets UDP bloqueadores y no bloqueantes, al igual que la diferencia entre los sockets TCP bloqueadores y los no bloqueantes. Escribí un cliente PoC simple y confirmé que el envío del canal UDP sin bloqueo() a menudo devuelve 0, mientras que el bloqueo nunca devuelve 0. ¡Gracias! – trustin