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 |