Как вручную установить минимальное значение для динамического буфера в Netty 3.2.6?Например 2048 байт - PullRequest
0 голосов
/ 22 ноября 2011

Мне нужно получить полный пакет с другого IP (навигационное устройство) по TCP / IP. Например, устройство должно периодически отправлять 966 байт (более одной минуты). В моем случае первый принятый буфер имеет длину 256 байт (первый фрагмент пакета), второй - 710 байт (последний фрагмент пакета), третий - полный пакет (966 байт). Как вручную установить минимальное значение для первой полученной длины буфера?

Это часть моего кода:

Executor bossExecutors = Executors.newCachedThreadPool();
Executor workerExecutors = Executors.newCachedThreadPool();
NioServerSocketChannelFactory channelsFactory =
                new NioServerSocketChannelFactory(bossExecutors, workerExecutors);
ServerBootstrap bootstrap = new ServerBootstrap(channelsFactory);
ChannelPipelineFactory pipelineFactory = new NettyServerPipelineFactory(this.HWController);
bootstrap.setPipelineFactory(pipelineFactory);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("child.receiveBufferSizePredictorFactory", 
  new FixedReceiveBufferSizePredictorFactory(2048)
);
bootstrap.bind(new InetSocketAddress(this.port));

1 Ответ

1 голос
/ 01 декабря 2011

Независимо от того, что receiveBufferSizePredictorFactory вы укажете, вы увидите, что сообщение разбито на несколько MessageEvent с. Это потому, что TCP / IP - это не протокол, ориентированный на сообщения, а протокол, ориентированный на поток. Пожалуйста, прочитайте руководство пользователя , которое объясняет, как написать правильный декодер, который решает эту распространенную проблему.

...