2017-09-27 12 views
0

URL은 http://url.com/username입니다. 클라이언트가 서버에 연결할 때 channelActive에서 사용자 이름을 확인해야합니다. 가능합니까?

감사netty4.x의 channelActive() 메소드에서 URL을 얻을 수있는 방법

public class Handler extends ChannelInboundHandlerAdapter{ 
    @Override 
    public void channelRead(ChannelHandlerContext ctx, Object msg){ 
     //NOT HERE 
    } 
    @Override 
    public void channelActive(ChannelHandlerContext ctx) { 
     //1. get username 
     //2. do some queries with username 
    } 

편집 : 나는 개체를 얻기 위해 두 핸들러 시도했지만 여전히 작동하지 않습니다.

@Override 
protected void initChannel(SocketChannel ch) throws Exception { 
    ChannelPipeline pipeline = ch.pipeline(); 
    pipeline.addLast(new SimpleChannelInboundHandler<Object>() { 
     @Override 
     protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { 
      DB.insert(msg);//insert msg to DB 
     } 
    }); 
    pipeline.addLast(new MyHandler()); 



public class MyHandler extends ChannelInboundHandlerAdapter { 
@Override 
public void channelActive(ChannelHandlerContext ctx) throws Exception { 
    DB.get();// get msg from DB 
    ctx.fireChannelActive(); 
} 

답변

1

수 없습니다. /username은 HTTP 요청의 일부이며이를 얻으려면 채널에서 바이트를 읽어야합니다. 채널에서 바이트를 읽지 않으면이 정보가 아직 제공되지 않으므로 사용자 이름을 얻을 수 없습니다.

즉, 채널이 활성화되고 채널에서 일부 바이트를 읽은 후에 만 ​​사용자 이름을 얻을 수 있습니다.

+0

2 개의 ChannelInboundHandlers로 시도했지만 여전히 작동하지 않습니다. Object를 얻는 다른 방법은 없습니다. @Dmitriy Dumanskiy – uidin

+0

Checkout netty http example - https://github.com/netty/netty/tree/4.1/codec-http –