https://github.com/oeljeklaus-you/nettylearning
Learning the Netty by <<Netty in action>> , there are some demoes
https://github.com/oeljeklaus-you/nettylearning
netty netty-http netty-in-action netty-websocket
Last synced: 6 months ago
JSON representation
Learning the Netty by <<Netty in action>> , there are some demoes
- Host: GitHub
- URL: https://github.com/oeljeklaus-you/nettylearning
- Owner: oeljeklaus-you
- Created: 2018-11-16T13:13:30.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-11-22T12:47:26.000Z (almost 7 years ago)
- Last Synced: 2025-02-15T06:31:37.541Z (8 months ago)
- Topics: netty, netty-http, netty-in-action, netty-websocket
- Language: Java
- Homepage:
- Size: 590 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Netty in Action
## Netty-异步和事件驱动
Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。
### Java网络编程
一般的Java网络编程:

ServerSocket上的accept()方法将会一直阻塞到一个连接建立,随后返回一个新的Socket用于客户端和服务器之间的通信。该ServerSocket将继续监听传入的连接。
BufferedReader和PrintWriter都衍生自Socket的输入输出流。前者从一个
字符输入流中读取文本,后者打印对象的格式化的表示到文本输出流。readLine()方法将会阻塞,直到在处一个由换行符或者回车符结尾的字符串被读取。
客户端的请求已经被处理 。
这段代码片段将只能同时处理一个连接,要管理多个并发客户端,需要为每个新的客户端
Socket创建一个新的Thread。
让我们考虑一下这种方案的影响。第一,在任何时候都可能有大量的线程处于休眠状态,只是等待输入或者输出数据就绪,这可能算是一种资源浪费。
第二,需要为每个线程的调用栈都分配内存,其默认值大小区间为64KB到1MB,具体取决于操作系统。
第三,即使Java虚拟机(JVM)在物理上可以支持非常大数量的线程,但是远在到达该极限之前,上下文切换所带来的开销就会带来麻烦。
#### Java NIO
新的还是非阻塞的
NIO 最开始是新的输入/输出(New Input/Output)的英文缩写,但是,该Java API已经出现足够长的时间了,
不再是“新的”了,因此,如今大多数的用户认为 NIO 代表非阻塞 I/O(Non-blocking I/O),
而阻塞 I/O(blocking I/O)是旧的输入/输出(old input/output,OIO)。
你也可能遇到它被称为普通 I/O(plain I/O)的时候。
## 第二章 开发第一个Netty服务器
### EchoServer开发
EchoServer进行开发,详情见代码
### EchoClient开发
EchoClient进行开发,详情见代码
## 第六章 Java的序列化
### 通过Java的序列化来进行通信
使用ObjectDecoder和ObjectEncoder进行解码和避免
### 服务端开发
对于ObjectDecoder可能存在拆包和粘包的问题,加你设置objectSize的大小为Integer.MAX_SIZE
### 客户端开发
在pipeline中添加解码和编码器
## 第七章 Protobuf序列化
### Protobuf的使用
使用Protobuf进行序列化,具有跨平台和语言无关,序列化后小等特点
1.安装protobuf
brew install protobuf
2.编辑SubscribeReq.proto

3.运行protoc命令
protoc -I=./ --java_out=../src/main/java/ ./SubscribeReq.proto
### Protobuf序列化
使用Protobuf进行序列化,开发服务器端与客户端
### 客户端和服务端开发
与第六章相似主要是解码编码起的使用
## 第八章 MarShalling序列化
### JBoss进行序列化
MarShalling完全兼容JDK序列化,对JBoss的解码编码类库进行封装
### 保留Java序列化的优势
完全兼容JDK序列化,通过Netty的Marshalling进行解编类
### 客户端和服务端开发
与第六章相似主要是解码编码起的使用
## 第九章 Http协议开发应用