Question

En Netty, personne ne sait si le ChannelBuffer passé à un gestionnaire pour un événement en amont (après vous l'avez lancé à partir ChannelEvent / ou MessageEvent) sera écrit en même temps par le cadre Netty pendant que vous le traiter?

Le guide de l'utilisateur et les exemples ne précisent pas explicitement si cela se produira ou non.

Par exemple, imaginons la méthode ci-dessous dans une classe qui étend SimpleChannelHandler et est lié en tant que gestionnaire sur un serveur netty:

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
  ChannelBuffer buffer = (ChannelBuffer) e.getMessage();

  if (buffer.readableBytes() == 4)
  {
    // Is it possible for the number of readable bytes to increase here?
  }
}

Dans la méthode ci-dessus, est-il possible que le nombre d'octets lisibles pour augmenter sur la ligne commentée (en supposant que le client envoie encore des données), ou seront ces cadres être garantie messages séparés et non dans le tampon fourni ?

La raison pour laquelle je demande est de savoir si je devrais copier le tampon à un local avant de faire une partie de mon traitement, ou si une telle copie est superflue.

Était-ce utile?

La solution

Une fois que Netty crée un ChannelBuffer et déclenche une MessageEvent avec elle, il est hors des mains de Netty et donc Netty ne modifie pas par tout moyen. Les gestionnaires ou tout autre code utilisateur peut modifier le tampon, mais en général, les gestionnaires bien écrit ne pas interférer avec d'autres gestionnaires. Si un mauvais gestionnaire conserve la référence au tampon reçu et modifie plus tard, alors vous verrez l'état tampon cassé bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top