暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Netty:从入门到实践

宇宙湾 2020-03-17
622

简介

Netty™ is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

基本概念

Channel

 代表一个到实体(硬件设备、文件、网络 Socket 等)的开放连接,如读操作或写操作

Callback

 代表一个在处理完某个事件之后,被调用的方法

Future

 代表一个异步操作结果的占位符

Event

 代表一个可能会触发相应动作的事件连接被激活、用户事件等

ChannelHandler

 代表一个响应特定事件而被执行的回调

特性

  • 统一的 API

  • 简单易用

  • 高性能

  • 健壮

  • 安全

  • 庞大的社区支持

架构

(图片来源:Netty™ 官网)


技术内幕

Netty 和 TCP 的关系

 本质上,Netty 仍然会调用 Java 的 Socket 库(如常见的 IO、NIO 和 NIO2 等),而 Java 自身也是对操作系统 Socket 接口的封装。到了操作系统层面,Socket 仍然会走 TCP 协议。所以,可以将 Netty 理解为,是对 TCP 协议的高度封装

IdleStateHandler 和 ReadTimeoutHandler / WriteTimeoutHandler 异同

 三者均是基于心跳机制来完成 socket 超时断开的,前者的功能实际上包含了后两者,IdleStateHandler 可以同时对 read / write 请求进行超时控制

EpollEventLoopGroup 和 NioEventLoopGroup 的区别

 Java 中的 NIO 会根据操作系统不同,选用不同的 Selector 实现,例如 Linux 对应 EPollSelectorProvider(epoll 模式)和 PollSelectorProvider(selector 模式)、MacOS 对应 KQueueSelectorProvider、Windows 对应 WindowsSelectorProvider。由此可见,EpollEventLoopGroup 只能被应用于 Linux 环境中。其主要优势是:

  • 使用的是边缘触发(ETedge-triggered),而非使用水位触发(LTlevel-triggered)

  • 提供了更多的配置参数, 如 TCPCORK、SOREUSEADDR 等

  • 通过 JNI 调用 C 代码,可以减少 GC 压力


文章转载自宇宙湾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论