2017-12-11 22 views
-1

그래서 저는 netty가있는 서버를 작성해 왔으며 다른 것을 작성하지 않았으므로 파이프 라인에 대한 내 접근 방식이 올바른지 궁금합니다.

나는 서버 및 클라이언트, ObjectEncoder 및 디코더에 2 개의 기본 처리기가 있으며, 예를 들어 UserAuthenticationHandler, UserActionHandler가 있고 각기 다른 패킷 및 패스를 처리하는 등 서버에 추가하는 각 기능에 대한 새 처리기를 만들려고 생각했습니다. 그것들을 상응하는 클래스들에 할당한다.

이것은 내 마음에 들었던 접근 방법 중 하나입니다. 다른 하나는 모든 기능을 처리하는 하나의 처리기이므로 모든 것을 처리하기 위해 큰 스위치를 작성해야한다는 것을 의미합니다.
첫 번째 방법을 사용하는 것이 좋습니까? 아니면 두 번째 방법을 사용해야합니까? 첫 번째 방법 내 핸들러는 괜찮습니까?

public class UserAuthenticationHandler extends AbstractPacketHandler { 
    private User user; 

public UserAuthenticationHandler(User user, DatabaseConnection databaseConnection) { 
    this.user = user; 
    new UserAuthenticator(databaseConnection); 
} 

@Override 
protected void handlePacket(Packet packet) { 

    switch (packet.packetType){ 
     case "START_LOGIN": 
      UserAuthenticator.startLoginProcess(packet, user); 
    } 
} 

@Override 
public void channelActive(ChannelHandlerContext ctx) throws Exception { 
    super.channelActive(ctx); 
} 

public User getUser(){ 
    return user; 
} 

}

두 번째 방법


예는 단지 첫 번째하지만 50 개 이상의 스위치의 경우와 모든 클래스의 지옥 생성자로 큰 상상한다.

+1

지금까지 시도한 코드 샘플을 제공해주십시오. 그렇게하면 더 효과적으로 당신을 도울 수 있습니다. – Ivonet

+0

@ivonet 현재 접근 방식을 추가했습니다. – Bleo

답변

1

일반적으로 메시지가 다른 메시지에 적용되므로 다른 처리기를 사용하는 것이 좋습니다. 그건 당신이 설명했던 것에서는 사실이 아닌 것 같아요. 귀하의 경우에 당신은 단지 당신의 응용 프로그램의 올바른 "비즈니스 로직"인터페이스로 디스패치하는 디코더/인코더와 하나의 핸들러를 가져야한다고 생각합니다.