Netty之HelloWorld

现在Java网络编程框架这块基本已经被Netty垄断了,几乎所有框架底层的RPC通信都是使用Netty来实现,Netty是一个高性能的异步通信框架,采用Java的NIO编写,它屏蔽了NIO的一些晦涩的编程模式,使NIO编程变得更加容易。

我们首先来写一个简单的Helloworld作为Netty的入门,我们会对主要的代码做一些简单的解释,等以后再来详细每个组件的使用。

服务端

首先来编写服务端的代码。

第14,15行的NioEventLoopGroup是一个NIO多线程IO处理器,这里一共用到了2个EventLoopGroup,第一个称作boss,接受即将来临的连接,第二个称作worker,在boss接受连接并将接受的连接注册到worker之后,处理连接上的的通信请求。

第17行的ServerBootstrap是用于创建服务端的辅助类,用于设置连接参数,EventLoopGroup,Handler等。

第22行的ChannelInitializer用于帮助用户配置channel,我们可以方便的在上面添加多个channelHandler,在相应的channelHandler完成我们对消息的处理。

第28行则是启动服务端并将其绑定在8080端口

服务端的消息处理流程则是在25行的TestServerHandler中完成。我们来看TestServerHandler的代码

首先继承ChannelInboundHanderAdaper,重写channelRead方法,该方法在channel中有数据来临时被调用,我们使用ByteBuf来进行消息读取与发送(ByteBuf是JDK中ByteBuff的升级版),发送完消息后释放掉msg的引用。

总结一下我们这个简易服务端的处理流程:接受到来自客户端的消息并打印,然后返回给客户端一个“response”字符串。

服务端的代码到此就已经全部完成了,接下来是客户端的代码。

客户端

第15行因为客户端不需要处理来自其他客户端的连接,所以不需要boss EventLoopGroup,只需要一个work EventLoopGroup即可

第17行的Bootstrap类似于服务端的ServerBootstrap是用于创建客户端的辅助类。

第24行是添加客户端处理逻辑的Handler

第28行指定host与端口连接到对应得服务端。

来看TestClientHandler的代码。

同样继承ChannelInboundHandlerAdapter,只不过客户端多重写了一个channelActive方法,该方法在channel激活时被调用,即一连接上服务端时就调用该方法,相当于客户端的初始化方法,这里在方法向服务端发送了一个“hello”。在channelRead方法中接受来自服务端的消息并将其打印。

服务端与客户端的代码都已经开发完了,接下来分别启动它们,查看结果。

运行

首先启动服务端,然后是客户端,查看控制台。

可以看到服务端接受到了客户端发来的“hello”。

客户端接受到了来自服务端的响应“response”

至此,一个简单的Netty HelloWorld就已经完成了,如果了解过Java NIO的同学应该可以对比出来,使用Netty大大节省了我们的工作量,而且代码逻辑更加清晰,代码整洁度更高。由于只是一个入门示例,还有很多的知识点没有涉及,比如TCP/IP的拆包与粘包,心跳机制等,在以后的文章在详细介绍,也会更加深入的介绍上面提到的一些组件(EventLoopGroup等)。

至此,敬礼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章