EventLoopGroup的实现用来处理不同的传输。在这个例子中我们实现了一个服务端的应用,因此会有2
个NioEventLoopGroup会被使用。第一个经常被叫做‘boss’,用来接收进来的连接。第二个经常被
叫做‘worker’,用来处理已经被接收的连接,一旦‘boss’接收到连接,就会把连接信息注册
到‘worker’上。如何知道多少个线程已经被使用,如何映射到已经创建的Channel上都需要依赖于
EventLoopGroup的实现,并且可以通过构造函数来配置他们的关系。
2.ServerBootstrap是一个启动NIO服务的辅助启动类。你可以在这个服务中直接使用Channel,但是
这会是一个复杂的处理过程,在很多情况下你并不需要这样做。
3.这里我们指定使用NioServerSocketChannel类来举例说明一个新的Channel如何接收进来的连接。
4.这里的事件处理类经常会被用来处理一个最近的已经接收的Channel。ChannelInitializer是一个特殊
的处理类,他的目的是帮助使用者配置一个新的Channel。也许你想通过增加一些处理类比如
DiscardServerHandler来配置一个新的Channel或者其对应的ChannelPipeline来实现你的网络程序。
当你的程序变的复杂时,可能你会增加更多的处理类到pipline上,然后提取这些匿名类到最顶层的类
上。
5.你可以设置这里指定的Channel实现的配置参数。我们正在写一个TCP/IP的服务端,因此我们被允许
设置socket的参数选项比如tcpNoDelay和keepAlive。请参考ChannelOption和详细的
ChannelConfig实现的接口文档以此可以对ChannelOption的有一个大概的认识。
6.你关注过option()和childOption()吗?option()是提供给NioServerSocketChannel用来接收进来的
连接。childOption()是提供给由父管道ServerChannel接收到的连接,在这个例子中也是
NioServerSocketChannel。
7.我们继续,剩下的就是绑定端口然后启动服务。这里我们在机器上绑定了机器所有网卡上的8080端
口。当然现在你可以多次调用bind()方法(基于不同绑定地址)。
恭喜!你已经熟练地完成了第一个基于Netty的服务端程序。
查看收到的数据
现在我们已经编写出我们第一个服务端,我们需要测试一下他是否真的可以运行。最简单的测试方法是用
telnet命令。例如,你可以在命令行上输入 telnetlocalhost8080 或者其他类型参数。