2017-02-10 6 views
0

Nettyクライアントの唯一のハンドラは、私は3つのパケットをサーバに送りました。サーバ・ハンドラでNetty:なぜ異なるパケットがサーバー内の要求として一緒に接続されるのですか?

@Sharable 
public class ClientHandler extends ChannelInboundHandlerAdapter { 
    @Override 
    public void channelActive(ChannelHandlerContext ctx) { 
     ctx.writeAndFlush(Unpooled.copiedBuffer("1", CharsetUtil.UTF_8)); 
     ctx.writeAndFlush(Unpooled.copiedBuffer("2", CharsetUtil.UTF_8)); 
     ctx.writeAndFlush(Unpooled.copiedBuffer("3", CharsetUtil.UTF_8)) 
       .addListener(ChannelFutureListener.CLOSE); 
    } 
} 

、私はちょうどそれを印刷し、実際に123別々123で3回を期待し、しかし。何が起こった?それらは異なるパケットではありませんか?

@Sharable 
public class ServerHandler extends SimpleChannelInboundHandler<ByteBuf> { 
    @Override 
    public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) { 
     System.out.println(in.toString(CharsetUtil.UTF_8)); 
    } 
} 

答えて

2

TCP/IPプロトコル(おそらくサーバーで使用している)はストリームベースです。つまり、ストリームベースのトランスポートのバッファはパケットのキューではなく、バイトのキューです。したがって、データをどのように送信するかは、別々のパケットとして、または1つのパケットとしてすべてのデータを組み合わせて行うことができます。

セパレータを追加するか、固定長パケットを送信するか、パケットサイズをメッセージに添付するかの3つのオプションがあります。

Here is詳細については、netty documentationを参照してください。

関連する問題