Code Monkey home page Code Monkey logo

evolution-from-netty-to-springboot's People

Contributors

cybertheye avatar kimmking avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

evolution-from-netty-to-springboot's Issues

wiki纠错,理论方面的补充

  1. 本项目注重演进,netty到springboot的演进,然后各个模块,代码编写的演进,所以文档写按照这个要求来
  2. tomcat部分的wiki 文档,现在只是粗略的编写,需要细节的描述,理论的补充,各位可以加进去
  3. 可以增加使用篇的编写,就类似Netty,Tomcat,SpringMVC,Springboot教程了。

mimic-tomcat第一阶段阶段规划

项目最终实现目标是 mimic-springboot 依赖 mimic-springmvc 依赖 mimic-tomcat 依赖 mimic-netty

  1. mimic-tomcat 开发

功能模块进度:

  • #23
  • Servlet功能
  • Filter功能
  • Listener功能

mimic-tomcat 迭代 (可以增加):

讨论:

  1. mimic-tomcat v1 里程碑达成
    复盘:
  • Git Book Mimic-Tomcat演进手册 完善版 发布
  • mimic-tomcat 第一版阶段总结,完成底层开发后,重新从高层,架构角度回顾,讨论

责任链 复用

目前实现的来一个请求就会去构造 Filter 责任链

优化,复用责任链

新增对xml方式的实现

目前的mimic-tomcat 框架是使用 注解的形式去配置和申明一个 Servlet,可以考虑增加 XML 配置的形式
潜在工作:

  1. 统一接口
  2. SPI机制

filter责任链模式改造

目前的责任链开启的方式是

    @Override
    public void start(MTRequest request, MTResponse response) {

        FilterNode traveler = head.getNext();
        try {
            while (traveler != null && traveler.exec(request, response)) {
                traveler=traveler.next;
            }

            targetServlet.service(request,response);

        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

这里实现的启动 责任链 并不是 Tomcat 中的实现模式,

从方法栈角度来看,这里是来一个方法,执行完,然后出栈,执行下一个。

Tomcat

@Override  
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
	  
	System.out.println("filter before"); 
    
    chain.doFilter(request, response);  
  
    System.out.println("filter after");

他是 以 chain.doFilter(request, response); 请求过来执行这句代码上方的代码
请求返回的时候去执行这句代码下方的代码

从方法栈角度来看,方法栈是没有出栈的,类似递归,最后递归回来。

todo 这里迭代修改实现模式

MTResponse中的write方法优化,改造

目前, MTResponse 的定义是

public interface MTResponse {
    void write(String content);

    void writeAndFlush(String content) throws UnsupportedEncodingException;
}

目前的实现是在 write 方法里面 拼接 要返回的内容,因为我们增加了请求的生命周期,引入了Filter后,开发者可以在 Filter 中,调用 写方法,返回一些东西。

如果直接去生成一个 HTTP 响应体,然后通过 通道写回,此时浏览器就收到了这个响应体,那么默认此次 HTTP 会话是结束了。所以后面 在执行 write 方法的话,就会报这个错误

这里暂时的解决方法是,先 默认在 Servlet 中 要返回的信息是最终要返回的信息,
然后在 Filter 中 如果写信息,那就先拼接着。最终在 Servlet 中调用 writeAndFlush

详见
测试Filter模块功能

这里的方案需要进行优化改造

filter增加顺序处理

tomcat里filter是按照web.xml配置的顺序读取并且执行的。目前采用的注解模式,需要考虑也加上顺序读取,顺序执行的处理

定义request初始化的时机

在实ServletRequestListener时,需要 定义request初始化的时机,而它决定了 ServletRequestListener 调用时机

目前是放在 MimicHttpInBoundHandler ,Netty pipeline 除了 HTTP 解码,的第一个处理环节。 在这里当作 request 初始化的时机

这样合不合理,Tomcat里面是怎么做的?

issue,wiki和分支说明

issue

tag

//模块分
#netty 
#tomcat 
#springmvc
#springboot 

//任务方向
#重构
#迭代
#性能优化

//优先级
Priority L3
Priority L2
Priority L1

//重要程度
VIP L3
VIP L2
VIP L1

//任务复杂度
O(3)
O(2)
O(1)

//其他
#bug 
#question
#具体工作
#维护工作

发布issue

!!!大家 Feel Free 发布 issue!!!,发挥一下主观能动性

先发布一下issue,再做相关开发

认领issue

在旁边的 Assignees ,弄上自己就行了

wiki

重新弄到 Git Book上了

大家一起修改,完善

https://app.gitbook.com/invite/b0EKvp3JOyWyCPaJP2Uk/JG220amczhLwx4UnvL1Z

分支

请先 push 到 dev 分支上
git push -u origin master:dev (注意远程仓库的分支)

讨论:一个模块对外接口的API怎么更好的规划

具体场景:

比如,在ComponentScanner

在后面 增加了 Servletinformation 之后,其实是添加了一个元数据

那么后面比如我要 容器初始化的时候,先去将 loadOnStartup 1 servlet 先实例化

那么这个时候,我希望这个 ComponentScanner 提供一个功能是 把 loadOnStartup 的所有给返回过来

那么就要涉及到 接口增加功能了, 那么这个 功能适不适合 增加在 ComponentScanner里面呢?

SOLID原则,

那么如果不放在这里,那么需要接口类的继承等实现方式,那么又该怎么做呢?

mimic-netty模块第一阶段规划

  1. mimic-netty 开发
    content:
    其实这里 netty 的作用是 Tocmat中 Connector 的角色替代
  • 启动,需求,功能讨论
  • Reactor线程模型,Disruptor 学习研讨
  • Mimic-Netty 开发
  1. mimic-netty 高并发迭代
    content:
  • 学习 Netty 高并发连接的解决方案
  • 实现 Mimic-Netty 比如在 2c8g,3w 并发链接(具体数字到时候讨论)
  1. mimic-netty里程碑
    content:
  • Git book Mimic-Netty演进手册 发布
  • 总结,高层回顾

其他暂定。。。。现在粒度比较大,等具体可以讨论后细分

mimic-springmvc第一阶段的规划

mimic-springmvc 开发

总体进度:

  • springmvc 的框架 学习研讨
  • DispacherServlet的请求流传流程学习研讨 #15
  • mimic-springmvc 开发

开发进度:

  • #28
  • Convert 功能开发

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.