Netty 是由 JBOSS 提供的一个 java 开源框架;
Netty 提供异步的、事件驱动的网络应用,程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty 是一个基于 NIO 的客户、服务器端编程框架,使用 Netty 可以确保你快速和简单的开发出一个网络应用;
Netty 5用户指南
线程模型 1.单线程模型在 ServerBootstrap 调用方法 group 的时候,传递的参数是同一个线程组,且在构造线程
组的时候,构造参数为 1,这种开发方式,就是一个单线程模型。
个人机开发测试使用。不推荐。
在 ServerBootstrap 调用方法 group 的时候,传递的参数是两个不同的线程组。负责监听
的 acceptor 线程组,线程数为 1,也就是构造参数为 1。负责处理客户端任务的线程组,线
程数大于 1,也就是构造参数大于 1。这种开发方式,就是多线程模型。
长连接,且客户端数量较少,连接持续时间较长情况下使用。如:企业内部交流应用。
在 ServerBootstrap 调用方法 group 的时候,传递的参数是两个不同的线程组。负责监听
的 acceptor 线程组,线程数大于 1,也就是构造参数大于 1。负责处理客户端任务的线程组,
线程数大于 1,也就是构造参数大于 1。这种开发方式,就是主从多线程模型。
长连接,客户端数量相对较多,连接持续时间比较长的情况下使用。如:对外提供服务
的相册服务器。
netty 使用 tcp/ip 协议传输数据。而 tcp/ip 协议是类似水流一样的数据传输方式。多次
访问的时候有可能出现数据粘包的问题(NIO异步读客户端发送的数据,如果连着发送三条数据根本没办法识别每次读的是哪一条,有可能是半条,有可能是一条半)
解决这种问题的方式如下:
定长数据流客户端和服务器,提前协调好,每个消息长度固定。(如:长度 100)。如果客户端或服
务器写出的数据不足 100,则使用空白字符补足(如:使用空格)。
客户端和服务器,协商定义一个特殊的分隔符号,分隔符号长度自定义。如:‘#’、‘KaTeX parse error: Expected group after '_' at position 1: _̲’、
‘AA@’。在通讯的时候,只要没有发送分隔符号,则代表一条数据没有结束。
相对最成熟的数据传递方式。有服务器的开发者提供一个固定格式的协议标准。客户端和服务器发送数据和接受数据的时候,都依据协议制定和解析消息。
JBoss Marshalling 序列化
Java 是面向对象的开发语言。传递的数据如果是 Java 对象,应该是最方便且可靠。



