E / S UDP non bloquantes vs blocage des E / S UDP en Java
Non-bloquant TCP/IP SocketChannel
s et Selector
dans NIO m'aider à gérer plusieurs connexions TCP/IP avec un petit nombre de threads. Mais comment sur le protocole UDP DatagramChannels
? (Je dois avouer que je ne suis pas très familier avec le protocole UDP.)
UDP envoyer des opérations ne semblent pas en bloc, même si la DatagramChannel
ne fonctionne pas en mode de blocage. Est-il vraiment un cas où DatagramSocket.send(DatagramPacket)
blocs en raison de la congestion ou quelque chose de similaire? Je suis vraiment curieux de savoir si il ya un tel cas, et ce au possible, il existe des cas dans un environnement de production.
Si DatagramSocket.send(DatagramPacket)
ne fait pas les bloquer et je ne vais pas utiliser DatagramSocket
et de se lier à un seul port, n'est-il pas avantage de l'utilisation de la non-mode de blocage avec DatagramChannel
et Selector
?
source d'informationauteur trustin
Vous devez vous connecter pour publier un commentaire.
Il a été un moment depuis que j'ai utilisé de Java DatagramSockets, Canaux et autres, mais je peux quand même vous donner un peu d'aide.
Le protocole UDP ne permet pas d'établir une connexion comme TCP. Plutôt, il se contente d'envoyer les données et les oublie. Si il est important de s'assurer que les données sont réellement y arrive, c'est de la responsabilité du client. Ainsi, même si vous êtes en mode de blocage de votre opération d'envoi bloque uniquement pour aussi longtemps que nécessaire pour vider le buffer. Depuis UDP ne sait rien sur le réseau, il va l'écrire à la première occasion sans contrôle de la vitesse du réseau ou si elle est à l'endroit où il est censé se passer. Donc, pour vous, il semble que si le canal est en fait immédiatement prêt pour plus d'envoi.
UDP ne bloque pas (Il ne bloque alors que c'est le transfert des données vers le système d'exploitation)
Cela signifie que si, à tout point de la prochaine hop/interrupteur/machine ne peut pas le tampon de paquet UDP, il tombe. Cela peut être souhaitable de comportement dans certaines situations. Mais c'est quelque chose que vous devez être conscients de.
De plus, l'UDP ne garantit pas pour
Cependant UDP prend en charge la multidiffusion de sorte que le même paquet peut être livré à un ou plusieurs hôtes. L'expéditeur n'a aucune idée si quelqu'un reçoit les paquets cependant.
Une chose la plus délicate sur le protocole UDP est qu'il fonctionne la plupart du temps, mais ne parvient pas mal, parfois, par des moyens qui sont très difficiles à reproduire. Pour cette raison, vous ne devriez pas supposer la fiabilité, même si vous faites quelques tests et il semble fonctionner.
Non le blocage est surtout utile sur le côté de réception.
Paquet de l'envoi ne peut être retardée en raison de circonstances locales: le trafic local outils de mise en forme comme "jeu de cartes réseaux" qui donnent la priorité à des jeux de trafic sur les autres sources de trafic, ou à une surcharge de la carte réseau (qui n'est pas susceptible de se produire) peut retarder l'envoi d'un paquet. Une fois sorti du système. Une fois le paquet de feuilles de l'interface locale, ce n'est plus de l'application de l'inquiétude.