# my-netty
**Repository Path**: panleiming/my-netty
## Basic Information
- **Project Name**: my-netty
- **Description**: netty的学习
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-06-18
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Netty学习
===
# 目录
1. 实战
1. 简易实现一个RPC调用
2. 使用Netty实现一个简易版本的Tomcat
# 实战
## 简易实现一个RPC调用
**实现思路:**
1. 首先需要有两个模块,一个是服务者模块(Server),提供具体的API接口。一个是消费者模块(Client),远程调用服务方的接口;
2. 由于消费者模块只有服务方的接口,没有对应的实现类,所以需要通过远程通信,把调用的Api方法及对应的请求数据提供给服务方,由服务方调用对应的实现方法,获取到数据后返回给消费者。这里远程通信就需要用到Socket;
3. 由于消费者只有服务方的接口,所以调用具体Api接口的具体实现类就需要通过动态代理生成,这里使用到了JDK原生的动态代理;
**代码实现:**
生产者模块**server**主要类:
* SimpleApi:对外提供主要的接口类
* SimpleService:接口类的实现
* RpcWrapper:传输数据的包装类
* Main:Socket版本的通信服务端
* NettyMain:Netty版本的通信服务端
消费者模块**client**主要类:
* SimpleService:主要调用生产模块SimpleApi接口的服务类
* RpcProxyUtil:动态代理类,动态生成生产模块的接口,其中socketProxy方法是Socket版本的远程通信,nettyProxy方法是Netty版本的远程通信
# 使用Netty实现一个简易版本的Tomcat
**实现思路:**
1. 根据使用Tomcat,需要先有一个配置文件来配置dispatcher,所以这里使用properties简易模拟web.xml;
2. 需要创建自己的**HttpRequest**,**HttpResponse**,**Servlet**类来模拟Tomcat中对应的类;
3. 由于Netty封装好了Http协议,所以这里就省略了自己封装以及一系列沾包等的处理;
4. 客户端在浏览器请求给服务端,服务端根据客户端的请求地址,进行分发请求,再将处理结果进行返回;
**代码实现:**
代码在**server**模块的**com.plm.server.netty**包下
* MyTomcat:启动类,init方法是装载配置文件,start方法是启动服务并监听端口
* MyRequest:对应HttpRequest类
* MyResponse:对应HttpResponse类
* MyServlet:servlet的基类
* GreetingServlet:MyServlet的实现类
* HelloServlet:MyServlet的实现类