Я написал небольшую систему клиентского сервера с Netty. Клиент (ы) отправляет сообщения на сервер, и сервер отвечает ACK после обработки сообщения. Этот ACK содержит все возможное смещение, поэтому я могу удалить его из своего списка ожидающих сообщений. Однако, с более высокой пропускной способностью (выше 2000 пс), я начинаю видеть, что иногда, когда декодер читает смещение (длинное), он получает очень большое смещение, что-то вроде 4755801206503331182 (когда обычное смещение находится в диапазоне 6 цифр). Количество ошибок кажется пропорциональным пропускной способности, чем выше пропускная способность, тем чаще ошибок (я бы оценил ее по 2 ошибкам каждые 1000 сообщений) < /p>
Это мой декодер: < /p>
public class HeartbeatAckDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception {
byte channelId = in.readByte();
in.markReaderIndex();
if (channelId == CHANNEL_ACK) {
if (in.readableBytes() < 8) { // long minimum
in.resetReaderIndex();
} else {
long offset = in.readLong();
out.add(ChannelMessage.ack(offset));
}
} else {
out.add(ChannelMessage.heartbeat());
}
}
}
< /code>
Этот декодер обрабатывает 2 типа сообщений, точек и сердцебиения. Первый байт рассказывает тип сообщения, если это HB, то больше нечего читать. Не похоже на то, что пропускная способность слишком высока для Нетти, потому что я отправляю то же количество сообщений от клиента на сервер (на самом деле, удваивает это, потому что у меня есть 2 клиента), и сервер прекрасно читает сообщения.
Идеи?
Подробнее здесь: https://stackoverflow.com/questions/797 ... throughput