# 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的实现类