Мы используем Spring Boot версии 1.2.8.RELEASE
, которая имеет управляемую зависимость от org.projectoreactor.*
с реакторной версией 1.1.6.RELEASE
.Project Reactor с Netty TCP Server - ByteBuff Размер застрял в 1024 при декодировании сообщений
Проблема, с которой я столкнулась, находится внутри моего пользовательского кодека (reactor.io.encoding.Codec
), данный буфер (reactor.io.Buffer
) ограничен 1024 байтами, но мое сообщение превышает этот предел. Когда я пытаюсь декодировать сообщения, это не полное сообщение (только частичное), и мое декодирование терпит неудачу, поскольку оно ожидает полного сообщения.
Вопрос 1. Как увеличить Buffer bytes
(reactor.io.Buffer
), поэтому моя функция приложения работает правильно? Простой пример ниже:
public class StringDecoder implements Function<Buffer, String> {
// Buffer is limited to 1024 but the message the client sent
// was 2k
@Override
public String apply(Buffer bytes) {
return bytes.toString();
}
}
Вопрос 2. Как сделать функцию подачи (выше) разбитой? Это означает, что когда буфер Netty достигает своего предела, моя функция приложения может создать свой собственный буфер (и управлять буфером), и в конечном итоге я смогу декодировать сообщение, а Reactory/Netty может передать его потребителю.
Примечание: В моем «основном» методе для настройки среды используется следующее. Netty Server работает под Windows и клиент находится в Linux. Связано ли это с реализацией Windows TCP?
// NOTES: ServerSocketOptions sets the max buffer for send and receive to
// something much larger than 1024. Verified with debugger
TcpServerSpec<String, String> spec = new TcpServerSpec<String, String>(NettyTcpServer.class);
spec.env(env);
spec.listen(port);
spec.dispatcher("sync");
spec.codec(new AgentCodec());
spec.consume(connectionHandler(handler));
TcpServer<String, String> tcp = spec.get();
tcp.start().await();