浅谈Netty

一、Netty简介

1.1 概念

​ Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、时间驱动网络应用程序框架和工具,用以快速开发高性能、高可靠的网络服务和客户端程序。

​ 也就是说,Netty是一个基于NIO的客户、服务器端编程框架,使用Netty可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

1.2 线程模型

1.2.1 单线程模型

​ 在ServerBootstrap调用方法group的时候,传递的参数是同一个线程组,且在构造线程组的时候,构造参数为1,这种开发方式,就是一个单线程模型。

​ 使用场景:个人机开发测试使用。不推荐。

1.2.2 多线程模型

​ 在ServerBootstrap调用方法group的时候,传递的参数是两个不同的线程组。负责监听的acceptor线程组,线程数为1,也就是构造参数为1。负责处理客户任务的线程组,线程数大于1,也就是构造参数大于1。这种开发方式,就是多线程模型。

​ 使用场景:长连接,且客户端数量较少,连接持续时间较长情况下使用。如:企业内部交流应用。

1.2.3 主从多线程模型

​ 在ServerBootstrap调用方法group的时候,传递的参数是两个不同的线程组。负责监听的acceptor线程组,线程数大于1,也就是构造参数大于1。负责处理客户端任务的线程组,线程数大于 1,也就是构造参数大于 1。这种开发方式,就是主从多线程模型。

​ 使用场景:长连接,客户端数量相对较多,连接持续时间比较长的情况下使用。如:对外提供服务的相册服务器。

二、Netty拆包粘包问题

2.1 粘包问题的原因

​ Netty使用TCP/IP协议传输数据。而TCP/IP协议类似水流一样的数据传输方式,并且Netty是基于NIO(非阻塞式IO)。多次访问的时候就有可能出现多条数据粘连,造成数据的错误和不完整,这就是Netty的粘包问题。

2.2 粘包问题的解决

2.2.1 定长数据流

​ 客户端和服务器,提前协调好,每个消息长度固定。(如:长度 10)。如果客户端或服
务器写出的数据不足 10,则使用空白字符补足(如:使用空格)。

2.2.2 特殊结束符

​ 客户端和服务器,协商定义一个特殊的分隔符号,分隔符号长度自定义。如:‘#’、‘$_$’、‘AA@’。在通讯的时候,只要没有发送分隔符号,则代表一条数据没有结束。

2.2.3 协议

​ 相对最成熟的数据传递方式。有服务器的开发者提供一个固定格式的协议标准。客户端和服务器发送数据和接受数据的时候,都依据协议制定和解析消息。

三、定时断线重连

​ 客户端断线重连机制。
​ 客户端数量多,且需要传递的数据量级较大。可以周期性的发送数据的时候使用。要求对数据的即时性不高的时候,才可使用。
​ 优点: 可以使用数据缓存。不是每条数据进行一次数据交互。可以定时回收资源,对资源利用率高。相对来说,即时性可以通过其他方式保证。如: 120 秒自动断线。数据变化 1000 次请求服务器一次。300 秒中自动发送不足 1000 次的变化数据。

四、心跳监测

4.1心跳监测

​ 使用定时发送消息的方式,实现硬件检测,达到心态检测的目的。
​ 心跳监测是用于检测电脑硬件和软件信息的一种技术。如:CPU 使用率,磁盘使用率,内存使用率,进程情况,线程情况等。

4.2 sigar

​ 需要下载一个 zip 压缩包。内部包含若干 sigar 需要的操作系统文件。sigar 插件是通过JVM 访问操作系统,读取计算机硬件的一个插件库。读取计算机硬件过程中,必须由操作系统提供硬件信息。硬件信息是通过操作系统提供的。zip 压缩包中是 sigar 编写的操作系统文件,如:windows 中的动态链接库文件。
​ 解压需要的操作系统文件,将操作系统文件赋值到${Java_home}/bin 目录中。

Thanks
0%