Netty基础知识

官网地址: https://netty.io/

快速入门:https://netty.io/wiki/user-guide-for-4.x.html

Netty 是一个 NIO 客户端服务器框架,方便快速、简单地开发网络应用程序。

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础。

注意:netty 5.x版本被弃用了,现在推荐的版本是4.x。被弃用的原因是5.x的API太复杂了,而且不稳定。

特性

设计

  • 对于多种传输类型具有统一的API。
  • 基于灵活的、可扩展的事件模型,这个事件模型可以清晰的分离关注点。
  • 可以定制线程模型,可以是单线程,或者是有一个或多个线程的线程池,例如SEDA。
  • 支持无连接的数据报套接字(从3.1版本开始)。

性能

  • 更好的吞吐量,更低的延迟。
  • 更少的资源消耗。
  • 最小化不必要的内存拷贝。

安全

  • 完全支持SSL/TLS和StartTLS。(

    扩展:StartTLS不是一个协议,而是一个用在邮件的命令,邮件客户端通过StartTLS告诉服务器端要将不安全的协议升级为安全的协议,比如SSL或TLS。参见:https://mailtrap.io/blog/starttls-ssl-tls/

netty架构

官方文档:https://netty.io/3.8/guide/#architecture

下面是netty的整体架构图。

在这里插入图片描述

强大的缓冲数据结构(Rich Buffer Data Structure)

Netty拥有自己的buffer API,它具有下面的特点:

  • 如果有需要,可以定义自己的buffer类型。
  • 通过内建的复合buffer类型可以达到零拷贝(zero copy)
  • 提供开箱即用的动态buffer类型。
  • 不需要调用flip()方法。注:这个flip()是java中buffer的方法,作用是调整buffer的起始位置和容量。
  • 比ByteBuffer速度快。

ChannelBuffer的组合与切分

在通信层(communication layers)进行数据传输的时候,数据经常会被组合和切分。

Netty支持零拷贝方式,具体是通过将ChannelBuffer指向需要的buffer,以此消除对数据拷贝的需要。

在这里插入图片描述

统一的异步I/O API

Netty通过抽象各种传输协议的操作,编写了统一的异步I/O接口。

基于Netty的应用程序从一个传输协议切换到另外一个传输协议非常的容易,只需要修改几行代码就可以完成。

基于拦截器模式的事件模型

Netty拥有定义良好的事件模型。当实现自己的事件类型的时候,不会打破已经存在的代码。

支持快速开发的高级组件

Netty提供了许多的高级特性支持快速开发网络应用程序。

编解码框架

Netty提供了编解码框架,可以将socket的数据接收与业务代码进行分离。

支持SSL/TLS

在java里面要支持SSL/TLS是非常复杂的,需要自己管理javax.net.ssl.SSLEngine。

Netty提供了SslHandler来处理SSLEngine中的细节和陷进。

开发程序的时候,只需要将SslHandler放入到ChannelPipeline中就可以了。

HTTP的实现

HTTP其他的实现都是在较高的层次,都已经是封装好了,开发者可以直接使用。

Netty在较低层次提供了对HTTP协议的操作,开发者可以根据自己的需要在netty http上实现特殊的功能,比如传输1GB的大文件。

WebSocket的实现

WebSocket可以在单个TCP Socket上建立双向、全双工的通信通道。WebSocket的设计目标是支持数据在Web 浏览器和服务器之间流动。

Netty实现了WebSocket协议。

整合Google Protocol Buffer

通过ProtobufEncoder和ProtobufDecoder,可以将the Google Protocol Buffers Compiler (protoc)生成的消息接入到Netty。

总结

Netty的架构由三部分组成——buffer、channel、event model,其他高级特性都是在这三个核心组件上构建的。

netty要解决的问题

通用的协议,比如HTTP,在某些特定的场景下并不能很好的发挥作用,比如传输大文件、多人游戏、实时的金融信息,在这些场景下就需要实现特定的协议来满足需求。

解决方案

Netty项目致力于提供一个异步的事件驱动网络应用程序框架,并且提供工具加速高性能、高扩展协议服务器和客户端的构建。

Netty的底层哲学是设计出给你舒适体验的API和实现。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值