是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐支持双协议的组件,组件在同一端口服务下同时支持http和WebSocket协议;通过组件定义的web api同样支持http和websocket调用。组件除了支持HTTP/Websocket还提供静态网页资源输出,从而可以在组件的基础上直接构建网站应用.在安全性方面组件支持SSL,只需要简单配置证书文件即可让服务支持https的安全性访问。 在性能上经测试FastHttpApi在GET/POST这些数据交互的场景下性能和吞吐能力是Asp.net core集成的Kestrel的2倍以上。
- 支持以函数的方式来制定HTTP请求逻辑
- 支持使用者处理异步响应
- 同一端口下同时支持http/websocket协议
- 支持Filter功能,以便更好地控制请求方法的处理
- 支持自定义Http Body解释器,方便制定基于json,xml,protobuf,msgpack等数据格式的传输
- 支持QueryString参数和Cookies
- 支持外置或内嵌到DLL的静态资源输出(默认对html,js,css资源进行GZIP处理)
- 支持SSL和Https
在同一端口服务中默认支持HTTP和WebSocket协议,所定义的控制器方法同时支持两种协议方式调用
由于在开发过程修改静态资源需要编译导致调试麻烦,在Debug模式下资源目录会指向项目的资源目录,修改静态资源不需要重新编译项目。
可以把静态资源打包到程序中,组件支持URL直接访问嵌入的静态资源,实现对Cookies的读写。
对Image类静态资源加入本地缓存标记;对HTML,CSS,JS资源加入了缓存修改标签,方便文件变更后刷新缓存;对HTML,CSS,JS等文件使用GZIP输出。
由于dotnet core下面没有其他简化的http api组件,只能拿Kestrel asp.net core来作对比,虽然对asp.net core不公平,但这样的对比测也只是为了体现简化后的性能回报;测试服务器是阿里云的4核虚拟机,8G内存,测试工具是AB,测试功能主要是针对GET/POST的json数据处理。由于Kestrel asp.net core默认不支持AB的Keep-Alive选项,所以测试结果就并没有针对asp.net core的Keep-Alive测试
// GET api/values/5
[HttpGet("{id}")]
public ActionResult Get(int id)
{
return new JsonResult(Employee.List(id));
}
// POST api/values
[HttpPost]
public ActionResult Post([FromBody] Employee value)
{
return new JsonResult(value);
}
// /listemployee?count
public IList<Employee> ListEmployee(int count)
{
return Employee.List(count);
}
// post /AddEmployee
public Employee AddEmployee([BodyParameter]Employee item)
{
return item;
}
对比一下两者在accept connection上的性能差异,开启了两个AB实例进行压测
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Run(context =>
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(DateTime.Now.ToString());
return context.Response.Body.WriteAsync(data, 0, data.Length);
});
}
// /hello?name=
public string Hello(string name)
{
return DateTime.Now + " hello " + name;
}