2012-04-18 1 views
0

Вопрос 1:Создать тестовую нагрузку для сервера от клиента

Я использую таймеры в своем клиенте рабочей нагрузки для потоковой передачи сообщений на сервер. Есть ли какие-либо последствия использования нескольких временных файлов для количества созданных потоков или совместного использования канала?

Я хочу понять, является ли это предпочтительным подходом для создания нагрузки. Таким образом, у меня могут быть другие экспоненциальные задержки или другие типы задержек.

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

Q1: Так что это только одна тема. Есть ли способ в Netty получить рабочую нагрузку, сгенерированную в нескольких потоках? Я могу запускать несколько клиентов, но я пытался использовать любую функцию. Netty должен запускать несколько потоков в клиенте. Я знаю, что механизмы параллелизма делают это. Q2. Могу ли я использовать SLA на сервере, выделяя отдельные каналы? Надеюсь, это имеет смысл, потому что сам NIO основан на событиях. Сообщения на одном канале будут обрабатываться Netty, тогда как сообщения другого типа будут иметь более низкий приоритет. Это даже разумно? –

+0

Q1: Обычно, когда вы создаете новый канал, netty присваивает его рабочему потоку. Общее число рабочих потоков - Number_of_cores * 2 по умолчанию. Когда вы создаете больше каналов, чем рабочие потоки, больше каналов назначается одному рабочему потоку. Поэтому для создания многопоточной загрузки необходимо создать больше каналов. Чтобы больше потоков изменяло параметр «workerCount» для NioClientSocketChannelFactory. –