Xcafe:Netty实现兼容SpringMVC的Web容器

本文介绍了Xcafe,一个基于Netty构建的Web容器,实现了与SpringMVC的兼容。文章详细阐述了其已实现的功能,如线程模型、架构设计,以及关键类如服务器启动、编解码处理器、请求分发器等。此外,还讨论了未来计划,包括异步消息处理、WebSocket支持和线程模型优化。
摘要由CSDN通过智能技术生成

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 一些常用的工具类
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值