2012-04-18 2 views
0

질문 1 :클라이언트에서 서버에 대한 테스트로드 생성

작업 부하 생성기 클라이언트에서 타이머를 사용하여 서버에 메시지를 스트리밍합니다. 생성 된 쓰레드의 수나 채널 공유에 대해 다중 timertask를 사용한다는 의미입니까?

이것이로드를 생성하는 기본 방법인지 이해하고 싶습니다. 이런 식으로 다른 기하 급수 지연이나 다른 유형의 지연이있을 수 있습니다.

public class TestClientHandler extends SimpleChannelHandler { 

private Timer timer = new HashedWheelTimer(); 

Channel channel; 

public TestClientHandler() { 
    timer.newTimeout(new DataStreamer(this), 
         1000, 
         TimeUnit.MILLISECONDS); 
} 

@Override 
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { 
     e.getCause().printStackTrace(); 

     org.jboss.netty.channel.Channel ch = e.getChannel(); 
     ch.close(); 
} 

    @Override 
    public void channelConnected(ChannelHandlerContext ctx, 
           ChannelStateEvent e) { 


     this.channel = e.getChannel(); 

     ChannelFuture future = e.getChannel().write("SOMETHING"); 

    } 

}

질문 2 : 내가 요청 서로 다른 종류의 서로 다른 채널을 유지하려면 어떻게

? 우선 순위 기반 아이디어가 있습니까? OrderAwareMemoryHandler는 다른 스레드에서 논의되는 것처럼 PriorityBlockingQueue에서 플러그 인 할 때 권장되는 방법입니까?

답변

1

q1 : Q1을 올바르게 이해했는지 확실하지 않습니다. 그냥, HashedWeelTimer가 단일 스레드 타이머 작업 관리자라고 말할 수 있습니다. -> 전달한 모든 작업이 하나의 스레드에 의해 실행됩니다.

q2 : 내게 불분명 함

+0

1 : 따라서 스레드는 하나뿐입니다. Netty에서 여러 스레드에서 작업 부하를 생성하는 방법이 있습니까? 여러 클라이언트를 실행할 수 있지만 Netty가 클라이언트에서 여러 스레드를 실행해야하는 기능을 사용하려고했습니다. 나는 동시성 프레임 워크가 이것을 알고있다. Q2. 별도의 채널을 할당하여 서버에서 SLA를 사용할 수 있습니까? NIO 자체가 이벤트를 기반으로하기 때문에 이것이 의미가 있기를 바랍니다. 한 채널의 메시지는 Netty에서 처리하고 다른 유형의 메시지는 우선 순위를 낮 춥니 다. 이것은 심지어 합리적인가? –

+0

Q1 : 일반적으로 새 채널을 만들 때 netty는이를 작업자 스레드에 할당합니다. 작업자 스레드의 총 수는 기본적으로 Number_of_cores * 2입니다. 작업자 스레드보다 채널을 많이 만들면 하나의 작업자 스레드에 더 많은 채널이 할당됩니다. 따라서 다중 스레드로드를 작성하려면 더 많은 채널을 작성해야합니다. 더 많은 스레드가 NioClientSocketChannelFactory에 대한 "workerCount"매개 변수를 조정하도록하십시오. –

관련 문제