0
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。但是现在我想把这两种类型的数据一起组成一个数据包。

怎么解决 或者上面的代码编码器功能怎么写?

4

1 回答 1

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

我想到了一种锁定 channel.write 时间的方法。这样可以保证传输的数据是顺序的,当网络层传输数据的顺序时,应用层变成一个完整的网络数据包。

| 1111 | 零拷贝数据 | 第2222章

从应用层接收的数据

| 1111 | 45678 | 第2222章

于 2014-10-10T02:39:26.390 回答