2017-02-10 1 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); 
    } 
} 

, 난 그냥 그것을 인쇄는 실제로 별도의 1, 23하지만 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 프로토콜은 스트림 기반입니다. 즉, 스트림 기반 전송의 버퍼는 패킷 대기열이 아니라 바이트 대기열입니다. 따라서 OS에 따라 데이터를 보내는 방법 - 별도의 패킷 또는 모든 데이터가 결합 된 1 개의 패킷으로 전송하는 방법입니다.

세 가지 옵션을 사용하여 구분 기호를 추가하거나 고정 길이 패킷을 보내거나 메시지에 패킷 크기를 첨부 할 수 있습니다.

Here is 자세한 내용은 netty 설명서를 참조하십시오.

관련 문제