您的位置 首页 java

Java生态网络编程扛把子Netty

Netty 核心组件

Channel;

EventLoop 主要负责监听网络事件并调用事件处理器进行相关IO操作处理;

ChannelFuture;

ChannelHandler 和 ChannelPipeline;

EventLoopGroup与EventLoop关系

EventLoopGroup包含多个EventLoop;

NioEventLoopGroup默认的 构造函数 会启用多少 线程

默认线程数量为 CPU核心数*2

Netty线程模型

单线程;

多线程

主从多线程模式;

Netty 零拷贝

在操作系统OS上的Zero-copy 通常指避免在 用户他态(User-space)与内核态(Kernel-space)之间来回拷贝数据。

Netty零拷贝指的是对数据操作的优化,以下几个方面:

使用Netty提供的CompositeByteBuf类,可以将多个ByteBuf合并为一个逻辑上的ByteBuf,避免各个ByteBuf之间的拷贝;

ByteBuf支持slice操作,可以将ByteBuf分解为多个共享同一个存储区域的ByteBuf,避免内存拷贝;

通过FileRegion包装的FileChannel.tranferTo实现文件传输,能直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致内存拷贝问题。

Netty心跳机制

当客户端和服务端之间在一段时间内没数据交互,处于idle状态时,其中一方会发送一个特殊的数据包给对方,当接收方收到数据包后会回应一个特殊的数据 报文 。即PING-PONG交互。以确认对方是否任然在线,这就确保了TCP连接的有效性。核心实现类IdleStateHandler。

TCP粘包/拆包;解决方法

TCP发送数据时,出现了多个 字符串 “粘”在了一起或者一个字符串被“拆开”的问题。

Netty自带解码器:

LineBasedFrameDecoder:他可以解码以换行符分隔的包,判断是否有换行符,然后进行截取;

DelimiterBasedFrameDecoder:可以解码自定义分隔符的解码器;

FixedLengthFrameDecoder:固定长度解码器,能按照指定长度对消息进行拆包;

LengthFieldBasedFrameDecoder:自定义长度解码器;

Netty大小端

网络编程 中,对于字节存在2种序列方式,大端 和 小端。

大端字节序,指高位字节在前,低位字节在后,0x12345678,和我们平时读数一样 如 368;

小端字节序,低位字节在前,高位字节在后,0x87654321, 和我们平时读数相反, 如 863;

文章来源:智云一二三科技

文章标题:Java生态网络编程扛把子Netty

文章地址:https://www.zhihuclub.com/182182.shtml

关于作者: 智云科技

热门文章

网站地图