ChannelFuture什么时候发出完成的通知?
Netty写入数据的时候,最终会调用Unsafe的方法的write方法,unsafe写入的数据的时候,会把msg包装成一个Entry放到ChannelOutboundBuffer当中,Entry的结构是
static final class Entry {
private static final Recycler<Entry> RECYCLER = new Recycler<Entry>() {
@Override
protected Entry newObject(Handle handle) {
return new Entry(handle);
}
};
private final Handle handle;
Entry next;
Object msg;
ByteBuffer[] bufs;
ByteBuffer buf;
ChannelPromise promise;
long progress;
long total;
int pendingSize;
int count = -1;
boolean cancelled;
}
Entry是通过一个对象池来管理,默认最大数量是32K,创建的时候从对象池中获取,关于对象池这里不做赘述。
写入ChannelOutBoundBuffer的时候是把msg包装成为Entry并添加到链表当中,调用write方法并不会让数据真正写到网卡,只是把数据写入到buffer中,而且此时