Я написал небольшую систему клиентского сервера с Netty. Клиент (ы) отправляет сообщения на сервер, и сервер отвечает ACK после обработки сообщения. Этот ACK содержит постоянное смещение увеличения, поэтому я могу удалить его из своего списка ожидающих сообщений.
Если пропускная способность низкая (~ 1000 сообщений в секунду), все это хорошо. Обычное смещение находится в диапазоне 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 клиента), и сервер прекрасно читает сообщения.
Есть идеи? < /P>
Подробнее здесь: https://stackoverflow.com/questions/797 ... throughput