如何同时发送文件区域和通道缓冲区类型的数据包


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。但是现在我希望这两种类型的数据一起形成一个数据包。

如何

解决或者如何编写上面的代码编码器函数?

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

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

|

1111 | 零拷贝数据 | 2222 |

从应用层接收的数据

|

1111 | 45678 | 2222 |

相关内容

  • 没有找到相关文章

最新更新