minicat

项目介绍

已实现http基础协议、参数接受、servlet、filter、cookie、多文件上传等。支持NIO。

一款轻量化Http服务器。支持bio、nio两种模式。归属Coody Framework下。传送门:https://gitee.com/coodyer/coody-icop

更新说明

2018-07-02:MiniCat正式立项。

2018-07-03:实现Http基本请求与响应。

2018-07-04:实现Session机制、Servlet、Gzip等

2018-07-05:实现formdata参数装载、Multipart参数与文件上传

2018-07-06:拓展Nio模式

2018-07-07:优化Http协议加载,修复某些情况下read阻塞。

2018-07-09:实现Filter机制。

截图说明

一个Servlet:

Multipart文件上传:

参数接受:

1、本项目未使用任意框架
2、本项目基于Socket实现Http服务器
3、本项目将在近期内持续更新

性能说明

基于MiniCat下测试Servlet打印hello world

NIO :i5 2320 8G DDR3 QPS峰值:2000 均值:1850

BIO :i5 2320 8G DDR3 QPS峰值:1800 均值:1720

NIO :E3 1230V2 8G DDR3 QPS峰值:2900 均值:2700

BIO :E3 1230V2 8G DDR3 QPS峰值:2800 均值:2650

TOMCAT:I5 2320 QPS峰值:1760 均值:1700

其中Tomcat未开启Nio和Apr(笔者懒得配了),喜欢折腾的小伙伴可以去试试

其余未测试======

本项目现实现功能:

1、Http服务端访问
2、Http(GET POST 多图文上传)参数装载
3、Gzip压缩
4、Cookie机制

本项目将实现功能:

1、服务器配置中心
2、程序启动入口
3、外置项目加载
4、内置整合加载
5、兼容javax规范
6、jstl模板引擎

运行说明:

1、新建Servlet。继承org.coody.framework.minicat.servlet.HttpServlet。实现doService方法

2、在新建的Servlet上写上@Servlet("/index.do")地址。其中/index.do即Mapping地址

3、在org.coody.web.init.Rute方法里面调用CoreApp.init(Class<>...clazz)方法上。初始化这个Servlet。

4、运行org.coody.web.init.Rute的main方法

5、访问http://127.0.0.1/index.do即可

相关配置:

配置类位于org.coody.framework.minicat.config.MiniCatConfig

参考网址见:https://gitee.com/coodyer/minicat

代码网址见:https://github.com/lipengsheng/MiniCat/tree/master

MiniCat:手写Http服务器的更多相关文章

  1. JavaSE 手写 Web 服务器(二)

    原文地址:JavaSE 手写 Web 服务器(二) 博客地址:http://www.extlight.com 一.背景 在上一篇文章 <JavaSE 手写 Web 服务器(一)> 中介绍了 ...

  2. JavaSE 手写 Web 服务器(一)

    原文地址:JavaSE 手写 Web 服务器(一) 博客地址:http://www.extlight.com 一.背景 某日,在 Java 技术群中看到网友讨论 tomcat 容器相关内容,然后想到自 ...

  3. 黑马vue---40、结合Node手写JSONP服务器剖析JSONP原理

    黑马vue---40.结合Node手写JSONP服务器剖析JSONP原理 一.总结 一句话总结: 服务端可以返回js代码给script标签,那么标签会执行它,并且可带json字符串作为参数,这样就成功 ...

  4. 【项目】手写FTP服务器-C++实现FTP服务器

    X_FTP_server 手写FTP服务器-C++实现FTP服务器 项目Gitee链接:https://gitee.com/hsby/ftp_Server 简介 一个基于libevent的高并发FTP ...

  5. 手写Tomcat服务器

    预备知识 编写服务器用到的知识点 1) Socket 编程2) HTML3) HTTP 协议4) 反射5) XML 解析6) 服务器编写 Socket编程 https://www.cnblogs.co ...

  6. 手写Javaweb服务器

    简单web服务器 回忆socket 创建客服端(在httpClient_1包下) public class Client {    public static void main(String[] a ...

  7. 利用html 5 websocket做个山寨版web聊天室(手写C#服务器)

    在之前的博客中提到过看到html5 的websocket后很感兴趣,终于可以摆脱长轮询(websocket之前的实现方式可以看看Developer Works上的一篇文章,有简单提到,同时也说了web ...

  8. 手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容

    写在前面的一些P话: 在公司网站开发中,我们往往借助于Flask.Django等网站开发框架去提高网站开发效率.那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么? 我们不止仅 ...

  9. 自己手写http服务器 http响应信息的封装与测试

    package cn.edu.sss.httpServer; import java.io.BufferedWriter; import java.io.IOException; import jav ...

随机推荐

  1. ES异常处理-NoNodeAvailableException

    1.问题描述 ES client客户端能创建,但是在用客户端操作时报:NoNodeAvailableException[None of the configured nodes are availab ...

  2. CentOS 7系统常见快捷键操作方式

    快捷键操作方式 Linux系统中一些常见的快捷方式,可有效提高操作效率,在某些时刻也能避免操作失误带来的问题. 最有用的快捷键 序号 快捷键 官方说明 掌握程度 01 Tab 命令或路径等的补全键 移 ...

  3. 【UR #9】App 管理器

    UOJ小清新题表 题目内容 UOJ链接 一句话题意:给出一个强联通的混合图,有一些有向边和无向边.删除一些边使其维持强联通的状态,求删边方案. 数据范围 \(1\leq n\leq 5000,0\le ...

  4. kafka-manage管理工具

    1 github地址   https://github.com/sheepkiller/kafka-manager-docker   2 启动   将参数传递给kafka-manager   对于版本 ...

  5. 【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。

    问题描述 Azure 的APIM集成虚拟网络有两种方式,外部VNET, 内部VNET. 外部VNET,要求低,可以通过APIM访问VNET中的VM等资源,不需要配置自定义DNS服务器,这种方式下,AP ...

  6. SQL中 char varchar和nvarchar的区别

    转至:http://www.cnblogs.com/carekee/articles/2094676.html char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...

  7. Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档

    Chimm.Excel -- 设置模板,填充数据,就完事儿了~ _____ _ _ _____ _ / __ \ | (_) | ___| | | | / \/ |__ _ _ __ ___ _ __ ...

  8. Linux入门到放弃之六《磁盘和文件系统管理二》

    上一篇博客写到了如何创建卷组和创建逻辑卷,但是有一个问题,需要更大逻辑卷空间怎么办呢? 要求:使用lvextend命令为逻辑卷 mail扩充容量,从卷组 mail_store 上再 划出5GB给逻辑卷 ...

  9. Django (学习第一部 基础操作)

    django 1 django 文件相关信息 2 Python创建django 3 命令行创建django 4 Django 必会三板斧 5 静态文件配置 6 request对象方法 7 pychar ...

  10. (CVPR 2019)The better version of SRMD

    CVPR2019的文章,解决SRMD的诸多问题, 并进行模拟实验. 进行双三次差值(bicubic)===>对应matlab imresize() %% read images im = {}; ...