Contrairement à boost.asio, netty n'a pas de méthode de lecture. Il n'est pas pratique dans les situations suivantes: Un nœud de gestion gère certains nœuds et les clients se connectent au nœud de gestion pour récupérer les informations résidant dans les nœuds. Lorsque le noeud de gestion reçoit la requête du client, il envoie une requête au noeud correspondant et attend la réponse du noeud. Lorsque le nœud de gestion et de réponse du nœud obtient l'information dans sa fonction 'messageReceived', comment envoyer l'information au canal qui appartient au client? Il doit envoyer un événement à Handler de la demande du client.Comment envoyer un événement à un autre gestionnaire dans Netty?
requête de client 1.get
2.ENVOI demande à un noeud
réponse 3.read de ce noeud
4.send réponse au client
tous ces quatre étapes peut être fait dans une fonction dans boost.asio. Mais netty ne supporte pas l'étape 3, la fonction de lecture est indépendante, l'utilisateur ne peut pas l'appeler directement. La seule façon est après avoir reçu la réponse dans le gestionnaire entre le noeud de gestion et le noeud, renvoyez-le à gestionnaire entre le noeud de gestion et le client. Quelle est la manière typique de faire ceci?
Je mets l'identification de canal du client dans le paquet envoie du noeud de gestion au noeud, ainsi quand la réponse de noeud, je sais que le canal de client que je devrais employer. – jean
Je suppose qu'il y a quelques utilitaires ou astuce typique pourrait résoudre ce problème. BTW, je pense que la philosophie de conception de Netty est une sorte de restriction. En fait, les 4 étapes que j'ai dites pourraient aussi être faites en async, aussi bien par chaîne de gestionnaires de callback complets. – jean
Dans netty, channel.write() vous fournira un ChannelFuture. Vous pouvez ajouter un FutureListener à cet objet futur, c'est-à-dire un callback de sorte que vous ayez également des fonctionnalités similaires dans Netty. Donc, vous pouvez attendre à l'étape 2, ou faire de la logique à la fin, mais l'étape 3 vient du client, donc ce rappel n'aidera pas. – Abe