您的位置:首页 > 其它

Netty5入门学习笔记001

2017-06-04 15:56 274 查看


Netty5入门学习笔记001

发表于1年前(2014-12-17 12:30) 阅读(7804) | 评论(870人收藏此文章, 我要收藏

赞10

1月16日厦门 OSC 源创会火热报名中,奖品多多哦


摘要 使用Netty5
模拟简单的时间服务器,TimeServer 时间服务器 服务端接收客户端的连接请求和查询当前时间的指令,判断指令正确后响应返回当前服务器的校准时间。
Netty NIO

Netty官网:http://netty.io/

本例程使用最新的netty5.x版本编写

服务器端:

TimeServer 时间服务器 服务端接收客户端的连接请求和查询当前时间的指令,判断指令正确后响应返回当前服务器的校准时间。

?
TimerServer接收到客户端的连接和读写请求后交给处理器handler进行事件的响应处理,服务器定义两组线程组,一组用来处理客户端连接,一组用来处理网络IO事件(SocketChannel)的响应,NioEventLoopGroup是Netty提供的NIO线程组,实际上就是Java NIO中的Reactor线程组。

ServerBootstrap是Netty提供的用于NIO服务端辅助启动类,降低了NIO服务端的开发复杂度。

ServerBootstrap需要绑定服务器网络IO事件的处理类ChildChannelHandler ,用于实际处理具体的IO事件,例如记录日志,对消息编解码等。

TimeServerHandler需要继承Netty提供的适配器ChannelhandlerAdapter重写channelRead等方法完成消息的读写。

?
服务器通过handler接收和处理消息请求,channelRead中的msg就是客户端请求的消息,通过解码获取具体信息后根据消息格式和定义完成后续的响应。

ByteBuf是netty封装和扩展的Java NIO中的ByteBuffer类,功能更完善。通过ByteBuf接收和解码msg 转成String类型
然后判断命令是都准确,根据结果做出响应。

客户端:

客户端的处理比较简单,启动客户端,链接服务器成功后发送时间查询的指令,等待服务器响应。

?
客户端定义一组线程组用于处理与服务器的网络IO事件。通过客户端辅助启动类 Bootstrap来配置线程组、TCP参数以及IO事件处理的Handler。

?
TimeClienthandler继承Netty提供的Handler适配器,重写channelActive和channelRead方法 前者通道打开active状态时 发送查询指令,后者接收服务器响应的消息并解码输出。

运行结果:









客户端启动后首先处理器channelActive被调用发送查询指令,服务器端接收到查询指令后返回了当前时间,客户端接收到服务器响应后解码输出当前时间。

JFinal经典入门到精通课程


Netty5入门学习笔记002-TCP粘包/拆包问题的解决之道(上)


Netty5入门学习笔记003-TCP粘包/拆包问题的解决之道(下)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: