# netty **Repository Path**: initcap/netty ## Basic Information - **Project Name**: netty - **Description**: 用来阅读netty源码,并梳理源码思路! - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: 4.1 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-16 - **Last Updated**: 2022-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Netty Project Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. ## Links * [Web Site](https://netty.io/) * [Downloads](https://netty.io/downloads.html) * [Documentation](https://netty.io/wiki/) * [@netty_project](https://twitter.com/netty_project) ## 这里是用来阅读netty源码的项目 ``` 项目目录说明 . ├── all all in one 这里是将所有的jar依赖到一个jar中,在项目中可以直接依赖这个jar ├── bom ├── buffer 数据容器 字节buffer ├── codec 编解码器,处理 沾包/半包问题 ├── codec-dns DNS编解码器 ├── codec-haproxy haproxy编解码器 ├── codec-http http编解码器 ├── codec-http2 http2编解码器 ├── codec-memcache memcache编解码器 ├── codec-mqtt mqtt编解码器 ├── codec-redis redis编解码器 ├── codec-smtp smtp编解码器 ├── codec-socks socks编解码器 ├── codec-stomp stomp编解码器 ├── codec-xml xml编解码器 ├── common 常用的工具类,遇到找不到包的问题需要在这里执行mvn compile ├── dev-tools ├── docker ├── example 案例测试部分,想要了解Netty的整体运行逻辑在这里找案例,进行打断点运行即可 ├── handler 支持各种人性化定制功能 ├── handler-proxy 代理相关 ├── resolver 解析功能使用 ├── resolver-dns DNS解析 ├── resolver-dns-native-macos 苹果电脑的DNS解析 ├── run-example.sh ├── tarball ├── testsuite ├── testsuite-autobahn ├── testsuite-http2 ├── testsuite-native-image ├── testsuite-native-image-client ├── testsuite-osgi ├── testsuite-shading ├── transport ├── transport-blockhound-tests ├── transport-native-epoll ├── transport-native-kqueue ├── transport-native-unix-common ├── transport-native-unix-common-tests ├── transport-rxtx 淘汰掉了(串口编程,没有测试,不好加测试) ├── transport-sctp └── transport-udt 淘汰掉了(因为依赖的barchart现在没人维护了) ``` ## 建议优先看一下example里面的案例 ## 第一次下载后启动测试报错io.netty.util.collection包不存在解决方法 ``` 1. cd common 2. mvn clean compile -Dcheckstyle.skip=true ``` ## TCP沾包/半包 Netty是如何解决的? ## `二次`编解码方式(一次编解码是指将TCP传输的数据处理成byte部分) * Java序列化 * Marshaling * XML * Json * MessagePack * Protobuf ### 如何选择用那个方式呢? * 空间:编码后占用空间 前三名: Protobuf、Json、MessagePack * 时间:编码速度 前三名: Protobuf、Json、MessagePack * 可读性:运维和开发人员是否能一眼看懂 Json、XML * 多语言的支持 * 最流行的是Google的Protobuf,其具备跨语言编解码器,可以生成各种语言的编解码不用些任何代码,需要额外学习Protobuf的定义格式 ## keepalice与idle检测 ## Netty的锁