如何快速搭建一个Netty服务
如何快速搭建一个Netty服务
netty旨在为可维护的高性能、高可扩展性协议服务器和客户端的快速开发提供异步事件驱动的网络应用程序框架和工具。换句话说,Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器开发等网络编程。
第一步 引用
第二步 编写服务端代码
1 编写服务端启动方法:
(1) 因为我在这里使用了Netty提供的分隔符解码器,Netty本身提供的分隔符解码器对于结尾是 /n 以及 /r/n 提供支持 但是我定义的msg中可能会有/n字符 所以自定义了用于区分结尾的 $_ 字符作为分隔符。
注意 : 使用了自定义分隔符的时候msg一定要以分隔符结尾 ,否则Netty 会继续等待写入,而不会及时发送。
// 请不要在意msg被我定义了 10240 KB
(2) Netty自带的心跳机制 空闲时间在达到一定时间后(时间由参数定义)会触发userEventTriggered 事件 事件,事件我会在 MyChatServerHandler 类中重写 具体逻辑代码需要和业务逻辑看齐。
2 构建MyChatServerHandler
2.1 Netty自带的事件几乎都在 SimpleChannelInboundHandler 这个类中所以需要构建MyChatServerHandler 类 重写其中的方法
(1) 这里定义的是连接线程组 所有连接到服务端的线程都会在这个线程组中存在,当某一个连接断开的同时线程组中代表这一断开连接的数据会被移除。
(2) Channel 这个类代表了当前接收到的msg是有哪一个IP的哪一个线程发送的 类中 channel.id() 会获取到唯一的一个id 但是一般也用不上,因为它本身就是唯一的。
到这里 一个简单的服务端就搭建好了 实现了类似多人聊天的功能 接收到的消息同步推送给所有连接中的客户端,并且区分了客户端自己发送的消息 还是由其他客户端发送的消息,类中还有一些实用的方法,我会截图放在下方,如果不需要的话可以直接跳过方法,直接搭建客户端了
这个方法会被心跳机制触发,我这里是做了关闭连接的操作 你也可以发送消息给客户端 或者将这个方法写在客户端 主动发送特殊msg ,当服务端没有发送特定msg给客户端时认为断开连接 尝试重新连接
第三步 编写客户端代码
1 编写客户端启动代码
启动引导与服务端几乎一样,这里我就跳过了
(1) 这里我注册了监听用于实现客户端断开或连接失败时的重新连接
(2) 该方法为了实现 客户端断开或连接失败时的重新连接提供服务
2 构建MyChatClientHandler
(1) 我将ChannelHandlerContext myCtx 定义为一个静态常量 在channelActive 方法中赋值,这样的话我就能在模块中的任意地方 调用 myCtx.channel().writeAndFlush(“msg”); 发送msg给服务端发送消息,要知道Netty几乎一切的一切都可以再 ChannelHandlerContext 中获取到,只要能获取到这个类 我就是无敌的 同样的为了保证这个类不为空 我这建立连接的第一时间向服务端发送了一个msg。
到这里一个简单的Netty就搭建好了,同时我们实现了一个简单的多人聊天室的功能, 而且这也是我的第一篇博客 可喜可贺可喜可贺 。
byebye !!!