netty 使用说明
相关jar包
io.netty netty-all4.1.77.Final
启动器类
AbstractBootstrap
public abstract class AbstractBootstrap, C extends Channel> implements Cloneable {
private static final Entry, Object>[] EMPTY_OPTION_ARRAY = new Entry[0];
private static final Entry, Object>[] EMPTY_ATTRIBUTE_ARRAY = new Entry[0];
volatile EventLoopGroup group;
private volatile ChannelFactory extends C> channelFactory;
private volatile SocketAddress localAddress;
private final Map, Object> options = new LinkedHashMap();
private final Map, Object> attrs = new ConcurrentHashMap();
private volatile ChannelHandler handler;
AbstractBootstrap() {
AbstractBootstrap(AbstractBootstrap bootstrap) {
public B group(EventLoopGroup group) {
public B channel(Class extends C> channelClass) {
public B channelFactory(io.netty.channel.ChannelFactory extends C> channelFactory) {
public B handler(ChannelHandler handler) {
public B option(ChannelOption option, T value) {
public B attr(AttributeKey key, T value) {
public B localAddress(SocketAddress localAddress) {
public B localAddress(int inetPort) {
public B localAddress(String inetHost, int inetPort) {
public B localAddress(InetAddress inetHost, int inetPort) {
public ChannelFuture bind() {
public ChannelFuture bind(int inetPort) {
public ChannelFuture bind(String inetHost, int inetPort) {
public ChannelFuture bind(InetAddress inetHost, int inetPort) {
public ChannelFuture bind(SocketAddress localAddress) {
public B validate() {
public ChannelFuture register() {
public abstract B clone();
public abstract AbstractBootstrapConfig config();
abstract void init(Channel var1) throws Exception;
final ChannelHandler handler() {
final SocketAddress localAddress() {
final ChannelFuture initAndRegister() {
final Map, Object> attrs() {
final Map, Object> options() {
final ChannelFactory extends C> channelFactory() {
final Map, Object> attrs0() {
final Map, Object> options0() {
final Entry, Object>[] newOptionsArray() {
final Entry, Object>[] newAttributesArray() {
static Entry, Object>[] newOptionsArray(Map, Object> options) {
static Entry, Object>[] newAttributesArray(Map, Object> attributes) {
static Map copiedMap(Map map) {
static void setAttributes(Channel channel, Entry, Object>[] attrs) {
static void setChannelOptions(Channel channel, Entry, Object>[] options, InternalLogger logger) {
private B self() {
private ChannelFuture doBind(final SocketAddress localAddress) {
private static void setChannelOption(Channel channel, ChannelOption> option, Object value, InternalLogger logger) {
private static void doBind0(final ChannelFuture regFuture, final Channel channel, final SocketAddress localAddress, final ChannelPromise promise) {
public String toString() {
********
内部类:PendingRegistrationPromise
static final class PendingRegistrationPromise extends DefaultChannelPromise {
private volatile boolean registered;
PendingRegistrationPromise(Channel channel) {
super(channel);
}
void registered() {
protected EventExecutor executor() {
Bootstrap:客户端启动器
public class Bootstrap extends AbstractBootstrap{ private static final InternalLogger logger = InternalLoggerFactory.getInstance(Bootstrap.class); private static final AddressResolverGroup> DEFAULT_RESOLVER; private final BootstrapConfig config = new BootstrapConfig(this); private volatile AddressResolverGroup resolver; private volatile SocketAddress remoteAddress; public Bootstrap() { private Bootstrap(Bootstrap bootstrap) { public Bootstrap validate() { public Bootstrap clone() { public Bootstrap clone(EventLoopGroup group) { public Bootstrap resolver(AddressResolverGroup> resolver) { public Bootstrap remoteAddress(SocketAddress remoteAddress) { public Bootstrap remoteAddress(String inetHost, int inetPort) { public Bootstrap remoteAddress(InetAddress inetHost, int inetPort) { public ChannelFuture connect() { public ChannelFuture connect(String inetHost, int inetPort) { public ChannelFuture connect(InetAddress inetHost, int inetPort) { public ChannelFuture connect(SocketAddress remoteAddress) { public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) { public final BootstrapConfig config() { void init(Channel channel) { final SocketAddress remoteAddress() { final AddressResolverGroup> resolver() { private ChannelFuture doResolveAndConnect(final SocketAddress remoteAddress, final SocketAddress localAddress) { private ChannelFuture doResolveAndConnect0(final Channel channel, SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise) { private static void doConnect(final SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise connectPromise) { static { DEFAULT_RESOLVER = DefaultAddressResolverGroup.INSTANCE; } }
ServerBootstrap:服务端启动器
public class ServerBootstrap extends AbstractBootstrap{ private static final InternalLogger logger = InternalLoggerFactory.getInstance(ServerBootstrap.class); private final Map , Object> childOptions = new LinkedHashMap(); private final Map, Object> childAttrs = new ConcurrentHashMap(); private final ServerBootstrapConfig config = new ServerBootstrapConfig(this); private volatile EventLoopGroup childGroup; private volatile ChannelHandler childHandler; public ServerBootstrap() { } public ServerBootstrap group(EventLoopGroup group) { public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) { public ServerBootstrap childOption(ChannelOption childOption, T value) { public ServerBootstrap childAttr(AttributeKey childKey, T value) { public ServerBootstrap childHandler(ChannelHandler childHandler) { public ServerBootstrap validate() { public ServerBootstrap clone() { public final ServerBootstrapConfig config() { final ChannelHandler childHandler() { final Map , Object> childOptions() { final Map, Object> childAttrs() { void init(Channel channel) { private ServerBootstrap(ServerBootstrap bootstrap) { ********** 内部类:ServerBootstrapAcceptor private static class ServerBootstrapAcceptor extends ChannelInboundHandlerAdapter { private final EventLoopGroup childGroup; private final ChannelHandler childHandler; private final Entry , Object>[] childOptions; private final Entry, Object>[] childAttrs; private final Runnable enableAutoReadTask; ServerBootstrapAcceptor(final Channel channel, EventLoopGroup childGroup, ChannelHandler childHandler, Entry , Object>[] childOptions, Entry, Object>[] childAttrs) { public void channelRead(ChannelHandlerContext ctx, Object msg) { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { private static void forceClose(Channel child, Throwable t) {
线程组
EventExecutorGroup
public interface EventExecutorGroup extends ScheduledExecutorService, Iterable{ boolean isShuttingDown(); Future> terminationFuture(); Future> shutdownGracefully(); Future> shutdownGracefully(long var1, long var3, TimeUnit var5); EventExecutor next(); Iterator iterator(); Future> submit(Runnable var1); Future submit(Runnable var1, T var2); Future submit(Callable var1); ScheduledFuture schedule(Callable var1, long var2, TimeUnit var4); ScheduledFuture> schedule(Runnable var1, long var2, TimeUnit var4); ScheduledFuture> scheduleAtFixedRate(Runnable var1, long var2, long var4, TimeUnit var6); ScheduledFuture> scheduleWithFixedDelay(Runnable var1, long var2, long var4, TimeUnit var6); }
EventLoopGroup
public interface EventLoopGroup extends EventExecutorGroup {
EventLoop next();
ChannelFuture register(Channel var1);
ChannelFuture register(ChannelPromise var1);
}
NioEventLoopGroup
public class NioEventLoopGroup extends MultithreadEventLoopGroup {
public NioEventLoopGroup() {
this(0);
}
public NioEventLoopGroup(int nThreads) {
public NioEventLoopGroup(ThreadFactory threadFactory) {
public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory) {
public NioEventLoopGroup(int nThreads, Executor executor) {
public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory, SelectorProvider selectorProvider) {
public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
public NioEventLoopGroup(int nThreads, Executor executor, SelectorProvider selectorProvider) {
public NioEventLoopGroup(int nThreads, Executor executor, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler) {
public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory) {
public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory) {
public void setIoRatio(int ioRatio) {
public void rebuildSelectors() {
protected EventLoop newChild(Executor executor, Object... args) throws Exception {
channel 类型
常用channel类(4.1.77 oio不推荐使用)
NioSocketChannel:tcp客户端 NioServerSocketChannel:tcp服务端 NioDatagramChannel:udp客户端、服务端 NioSctpChannel:sctp客户端 NioSctpServerChannel:sctp服务端
配置参数
ChannelOption
public class ChannelOptionextends AbstractConstant > { private static final ConstantPool > pool = new ConstantPool >() { protected ChannelOption
channel pipeline
通过channel接口获取对应的channel pileline,添加自定义的handler
ChannelInitailizer
@Sharable public abstract class ChannelInitializerextends ChannelInboundHandlerAdapter { private static final InternalLogger logger = InternalLoggerFactory.getInstance(ChannelInitializer.class); private final Set initMap = Collections.newSetFromMap(new ConcurrentHashMap()); public ChannelInitializer() { } protected abstract void initChannel(C var1) throws Exception; //channel初始化 public void handlerAdded(ChannelHandlerContext ctx) throws Exception { public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { public final void channelRegistered(ChannelHandlerContext ctx) throws Exception { private boolean initChannel(ChannelHandlerContext ctx) throws Exception { private void removeState(final ChannelHandlerContext ctx) {
Channel
public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable{ ChannelId id(); EventLoop eventLoop(); Channel parent(); ChannelConfig config(); boolean isOpen(); boolean isRegistered(); boolean isActive(); boolean isWritable(); long bytesBeforeUnwritable(); long bytesBeforeWritable(); SocketAddress localAddress(); SocketAddress remoteAddress(); ChannelFuture closeFuture(); ChannelMetadata metadata(); Channel.Unsafe unsafe(); ChannelPipeline pipeline(); //获取channel pipeline ByteBufAllocator alloc(); Channel read(); Channel flush(); ******** 内部接口:Unsafe public interface Unsafe { Handle recvBufAllocHandle(); SocketAddress localAddress(); SocketAddress remoteAddress(); void register(EventLoop var1, ChannelPromise var2); void deregister(ChannelPromise var1); void bind(SocketAddress var1, ChannelPromise var2); void connect(SocketAddress var1, SocketAddress var2, ChannelPromise var3); void disconnect(ChannelPromise var1); void close(ChannelPromise var1); void closeForcibly(); void beginRead(); void write(Object var1, ChannelPromise var2); void flush(); ChannelPromise voidPromise(); ChannelOutboundBuffer outboundBuffer(); } }
ChannelPipeline
public interface ChannelPipeline extends ChannelInboundInvoker, ChannelOutboundInvoker, Iterable> { ******* add 操作 ChannelPipeline addFirst(String var1, ChannelHandler var2); ChannelPipeline addFirst(EventExecutorGroup var1, String var2, ChannelHandler var3); ChannelPipeline addLast(String var1, ChannelHandler var2); ChannelPipeline addLast(EventExecutorGroup var1, String var2, ChannelHandler var3); ChannelPipeline addBefore(String var1, String var2, ChannelHandler var3); ChannelPipeline addBefore(EventExecutorGroup var1, String var2, String var3, ChannelHandler var4); ChannelPipeline addAfter(String var1, String var2, ChannelHandler var3); ChannelPipeline addAfter(EventExecutorGroup var1, String var2, String var3, ChannelHandler var4); ChannelPipeline addFirst(ChannelHandler... var1); ChannelPipeline addFirst(EventExecutorGroup var1, ChannelHandler... var2); ChannelPipeline addLast(ChannelHandler... var1); ChannelPipeline addLast(EventExecutorGroup var1, ChannelHandler... var2); ******* remove 操作 ChannelHandler remove(String var1); ChannelHandler removeFirst(); ChannelHandler removeLast(); ChannelPipeline remove(ChannelHandler var1); T remove(Class var1); ******* replace 操作 ChannelPipeline replace(ChannelHandler var1, String var2, ChannelHandler var3); ChannelHandler replace(String var1, String var2, ChannelHandler var3); T replace(Class var1, String var2, ChannelHandler var3); ******* 获取ChannelHandler ChannelHandler first(); ChannelHandler last(); ChannelHandler get(String var1); T get(Class var1); ******* 获取ChannelHandlerContext ChannelHandlerContext firstContext(); ChannelHandlerContext lastContext(); ChannelHandlerContext context(ChannelHandler var1); ChannelHandlerContext context(String var1); ChannelHandlerContext context(Class extends ChannelHandler> var1); ******* 触发channel事件 ChannelPipeline fireChannelRegistered(); ChannelPipeline fireChannelUnregistered(); ChannelPipeline fireChannelActive(); ChannelPipeline fireChannelInactive(); ChannelPipeline fireExceptionCaught(Throwable var1); ChannelPipeline fireUserEventTriggered(Object var1); ChannelPipeline fireChannelRead(Object var1); ChannelPipeline fireChannelReadComplete(); ChannelPipeline fireChannelWritabilityChanged(); ******* 其余操作 Channel channel(); //获取pipeline对应的channel List names(); //获取handler名称集合 Map toMap(); //获取handler及其对应的name ChannelPipeline flush(); //刷新pipeline }
ChannelHandler
public interface ChannelHandler {
void handlerAdded(ChannelHandlerContext var1) throws Exception;
void handlerRemoved(ChannelHandlerContext var1) throws Exception;
@Deprecated
void exceptionCaught(ChannelHandlerContext var1, Throwable var2) throws Exception;
@Inherited
@Documented
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Sharable {
}
}
ChannelHandlerContext
public interface ChannelHandlerContext extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker {
String name();
Channel channel();
boolean isRemoved();
EventExecutor executor();
ChannelHandler handler();
ByteBufAllocator alloc();
ChannelPipeline pipeline();
ChannelHandlerContext read();
ChannelHandlerContext flush();
ChannelHandlerContext fireChannelRegistered();
ChannelHandlerContext fireChannelUnregistered();
ChannelHandlerContext fireChannelActive();
ChannelHandlerContext fireChannelInactive();
ChannelHandlerContext fireExceptionCaught(Throwable var1);
ChannelHandlerContext fireUserEventTriggered(Object var1);
ChannelHandlerContext fireChannelRead(Object var1);
ChannelHandlerContext fireChannelReadComplete();
ChannelHandlerContext fireChannelWritabilityChanged();
@Deprecated
Attribute attr(AttributeKey var1);
@Deprecated
boolean hasAttr(AttributeKey var1);
}



