Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Плохая производительность Netty клиента
Список форумов
 ->  Сети


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
DoTheTwist : 1
Новичок

СообщениеЯнв 25, 2012 15:18 
Ответить с цитатой
Доброго времени, суток.

Ситуация следующая. Написан сервер на Netty, который при подключении клиента отправляет ему каждые 2 микросекунды сообщение ( создаем нагрузку около 500К сообщений в секунду ). Используется текстовый, открытый протокол, размеры сообщения ~100 байт каждое. Используя написанный третьими лицами клиент обрабатывает ~400k сообщений в секунду. Собственно проблема появилась при написании собственного клиента на Netty. Наивная реализация может обработать около 3к сообщений в секунду, что совсем неудовлетворительно. Клиент и сервер запущены на 1 сервере. Код клиента ниже :

Код:

[b]Client.java[/b]
public class Client {
    private static ClientBootstrap bootstrap;
    private static Channel connector;
   
    public static final int MIN_READ_BUFFER_SIZE = 64;
    public static final int INITIAL_READ_BUFFER_SIZE = 16384;
    public static final int MAX_READ_BUFFER_SIZE = 655360;
   
    public static boolean start()
    {
         ChannelFactory factory =
            new NioClientSocketChannelFactory(
                    Executors.newCachedThreadPool(),
                    Executors.newCachedThreadPool());

        bootstrap = new ClientBootstrap(factory);

        bootstrap.setPipelineFactory( new ClientPipelineFactory() );

        bootstrap.setOption("tcpNoDelay", true);
        bootstrap.setOption("keepAlive", true);
        bootstrap.setOption("receiveBufferSize", 1048576);
       
        bootstrap.setOption(
                "child.receiveBufferSizePredictorFactory",
                new AdaptiveReceiveBufferSizePredictorFactory(
                        MIN_READ_BUFFER_SIZE,
                        INITIAL_READ_BUFFER_SIZE,
                        MAX_READ_BUFFER_SIZE)
        );
             ChannelFuture future = bootstrap
                .connect(new InetSocketAddress("127.0.0.1", 9013));
        if (!future.awaitUninterruptibly().isSuccess()) {
            System.out.println("--- CLIENT - Failed to connect to server at " +
                               "localhost:9013.");
            bootstrap.releaseExternalResources();
            return false;
        }

        connector = future.getChannel();
       
        return connector.isConnected();
    }
    public static void main( String[] args )
    {
        boolean started = start();
        if ( started )
            System.out.println( "Client connected to the server" );
    }
}

[b]ClientPipelineFactory.java[/b]
public class ClientPipelineFactory  implements ChannelPipelineFactory{

    @Override
    public ChannelPipeline getPipeline() throws Exception {
        ChannelPipeline pipeline = pipeline();
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
                  1024, Delimiters.lineDelimiter()));


          // and then business logic.
        pipeline.addLast("handler", new ItchMessageHandler() );

        return pipeline;
    }
   
}


Handler сообщений совсем простой, в messageReceived просто считается пропускная способность.

Обращаюсь к знающим людям : как можно увеличить пропускную способность? Дело не в сервере, так как чужой клиент может обрабатывать 400к сообщений
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Сети


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru