Как отправить пакет в обоих типах FileRegion и ChannelBuffer вместе

public class Response{
  public int packetLength;
  public int cmd;
  public int seqId;
  public FileRegion fileRegion; //file content
  public String filename;
  public int begin;
  public int end;
  public String otherExtra;

  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e){  
    if(e.getMessage() instanceof Request){
        Request request = Request(e.getMessage());
        Channel ch = e.getChannel();
        Response response = new Response();
        response.cmd   = 111;
        response.seqId = 111;
        response.begin = 0;
        response.end   = 256;
        response.fileRegion = new DefaultFileRegion(GetFile().getChannel(),response.begin, response.end);
        response.filename = "test";
        response.otherExtra = "service"
        ch.write(response);
    }
  }
}

Мне нужно использовать нулевую копию (уровень ОС) для отправки данных в поле сетевого пакета. netty поддерживает FileRegion и ChannelBuffer в этих двух типах передачи данных. Но теперь я хочу, чтобы эти два типа данных вместе образовывали пакет.

Как решить Или как написать вышеприведенный код функции кодировщика?


person Liuda    schedule 09.10.2014    source источник


Ответы (1)


  synchronized(mutex){
      ch.write("11111111");
      ch.write("222222");
      ch.write(region).addListener(lister);
      ch.write("333333");
  }

Я придумал способ зафиксировать время канала. Это гарантирует, что передаваемые данные являются последовательными, последовательность данных, передаваемых, когда сетевой уровень, прикладной уровень в полный сетевой пакет.

| 1111 | данные с нулевым копированием | 2222 |

Данные, полученные с прикладного уровня

| 1111 | 45678 | 2222 |

person Liuda    schedule 10.10.2014