疑惑
bootstrap.bind(port)是绑定端口 .channel(NioServerSocketChannel.class)是负责监听的,为什么是先监听代码后绑定代码呢
解惑:不是的,.channel(NioServerSocketChannel.class)是通道标识,这个代码是客户端还是服务器
bootstrap.bind(port)也是bootstrap的重点,先绑定端口,创建连接的;封装底层代码;
f.channel().closeFuture().sync();
疑惑:这个是等待服务器关闭?我只想知道服务器关闭了还能接受其他的客户端连接么?
解惑:f.channel();通过ChannelFuture可以获取到Channel,从而利用Channel在通道上进行读、写、关闭等操作;
看下面图片你就知道了
ChannelFuture f = bootstrap.bind(port).sync();
疑惑:既然有客户端需要连接,为什么绑定端口要设置成异步的?又不会阻塞?
解惑:因为这个代码是封装的,不仅仅是绑定端口号,更是建立连接,server.accpet();这个是阻塞的,所以是异步;
疑惑:netty框架中涉及通道,我想知道一个服务器端的netty框架有几个通道?
解惑:根据连接客户端的数量决定;服务端处理初始化的时候只有一个服务器类型的通道,但是当客户端连接数多的时候就会注册通道;
疑惑:绑定端口就是bootstrap启动类开始运作的时候,那么怎么建立连接呢?
解惑:bootstrap.bind(port).sync();这个代码底层就是server.accpet()建立连接。