1.0 前言
Netty是一个非常优秀的java nio框架,这已无需多言。国庆时逛StackOverFlow,发现有人问如何用netty来支持Spring MVC,逛了一圈github并没有找到有价值的分享。正好,我一直都想自己实现一个web容器,于是本着重复造轮子的精神,写了一个Xcafe。
2.0 概览
2.1 已实现功能:
⑴ 使用SpringMVC处理http请求⑵ 静态资源缓存和直接返回数据
⑶ 本机session生成和缓存
⑷ 支持直接返回对象
⑸ 支持文件上传下载(MultipartFile)
⑹ 支持ServletOutPutStream写返回数据
2.2 待实现功能:
⑴ 使用Spring MVC处理WebSocket⑵ 实现Xcafe MVC 框架(不使用java servlet api,而是完全根据Netty http编解码的实现)
⑶ 支持根据配置选择使用Spring MVC 或 Xcafe MVC
⑷ 负载均衡
⑸ 分布式缓存、分布式Session
⑹ 异步消息发送
3.0 架构
3.1 线程模型
考虑到大部分Web请求的业务逻辑都需要请求数据库、读写文件等操作,为了尽可能多地接受连接,尽可能多地处理请求,当前的实现是将所有的业务逻辑处理交由其它线程池去处理。这将会导致线程间通信和频繁的线程切换。当将Xcafe用作负载均衡、缓存服务器或者处理其它简单的不耗时的请求时,这并不是一个合理的选择。因此,未来将在初始化容器时可以根据配置选择在workerGroup处理还是使用额外的ThreadPool。
未来的异步消息处理和WebSocket协议实现后,如果经过测试有必要,将再在上面的线程模型基础上增加消息发送队列线程池,线程池中的每一个线程负责维护一个消息发送队列,初步考虑使用java的fork/join框架最大限度地处理消息发送请求。线程模型将会演变成:
bossGroup负责连接workerGroup负责编解码
BusinessThreadPool负责业务逻辑
MessageThreadPool负责消息发送
3.2 目录介绍
1. core 容器核心,连接管理和协议处理 2. cache 静态资源缓存 3. example 示例 输入以下网址 http://localhost:18898/test/index.do http://localhost:18898/3.html 可进行简单的演示 4. mvc 未来需要实现的mvc框架 5. util 一些常用的工具类 |