dotnet core高吞吐Http api服务组件FastHttpApi

简介

是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服务最常用两个指令GET/SET,满足在应用实现JSON,PROTOBUF和MSGPACK等基于HTTP的数据交互功能,虽然是一个精简版本但针对SSL这方面的安全性还是支持。有牺牲就必然有收获,FastHttpApi作出这么大的精简必然在性能上有所收获取,经测试FastHttpApi在GET/POST这些数据交互的场景下性能和吞吐能力是Asp.net core集成的Kestrel的要优胜许多。

https://github.com/IKende/FastHttpApi

使用便利性

FastHttpApi虽然在HTTP方面作了大量的精简,但并没有为此增加了它使用的复杂度。FastHttpApi具备asp.net core webapi的便利性;应用人员只需要制定和webapi一样的方法即可,在使用过程中和写普通逻辑方法没有多大的区别。

定义一个控制器

控制器用来定义具体相应URL处理的方法,只需要在类上定义Controller属性即可把类中的Public方法提供给Http访问;方法参数来源于QueryString,当参数标记为BodyParameter的时候参数来源于Http Body.

640?wx_fmt=png

Filter定义

Filter是Controller处理方法的拦载器,通Filter可以对所有方法进行统一拦载处理,如权限日志等。

640?wx_fmt=png

启动服务

640?wx_fmt=png

制定HTTP Body转换器

转换器是组件最常用的自定义功能,通过它可以实现不同种类的数据格式,如json,protobuf和msgpack等。以下是一个json转换器的实现

640?wx_fmt=png

性能对比测试

由于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测试

Kestrel asp.net core代码

640?wx_fmt=png

FastHttpApi 代码

640?wx_fmt=png

Kestrel asp.net core GET测试结果

640?wx_fmt=png

FastHttpApi GET测试结果

640?wx_fmt=png

FastHttpApi GET测试结果开启Keep-Alive

640?wx_fmt=png

Kestrel asp.net core POST测试结果

640?wx_fmt=png

FastHttpApi POST测试结果

640?wx_fmt=png

FastHttpApi POST测试结果开启Keep-Alive

640?wx_fmt=png

针对Kestrel的对比测试

对比一下两者在accept connection上的性能差异,开启了两个AB实例同时进行压测,结果是FastHttpApi在处理并发数快高于Kestrel快一倍的情况,CPU使用率只有Kestrel的一半。

Kestrel代码

640?wx_fmt=png

FastHttpApi代码
        //  /hello?name=public string Hello(string name){            return DateTime.Now + " hello " + name;}
Kestrel测试结果

640?wx_fmt=png

FastHttpApi测试结果

640?wx_fmt=png

原文地址:https://www.cnblogs.com/smark/p/9660929.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中的中间件

前言由于是第一次写博客,如果您看到此文章,希望大家抱着找错误、批判的心态来看。 sky!何为中间件?在 ASP.NET Framework 中应该都知道请求管道。可参考:浅谈 ASP.NET 的内部机制 系列,个人感觉超详细。题外话:说到请求管道,就想…

.NET Core中的性能测试工具BenchmarkDotnet

背景介绍之前一篇博客中,我们讲解.NET Core中的CSV解析库,在文章的最后,作者使用了性能基准测试工具BenchmarkDotNet测试了2个不同CSV解析库的性能,本篇我们来详细介绍一下BenchmarkDotNet。原文链接:https://dotnetco…

some useful tricks

异或题思考方向&#xff1a;01trie树&#xff0c;分治 2. 二分图最大匹配&#xff0c;最大独立集互相转换 3. Snow 4. Code 5. Code 6. Code 7. 题目 #include<iostream> #include<cstdio> using namespace std; const int N100010; int n,p,nxt[N],no[200]…

25大技术主题向您发出最后一次约【惠】邀请

一年一度的微软技术盛会即将在上海世博中心拉开大幕金秋十月&#xff0c;来自两岸三地的百名明星讲师将携 25 大技术主题&#xff0c;齐聚上海为您奉献一场无与伦比的技术视听盛宴您&#xff0c;准备好了吗&#xff1f;25大技术主题公开&#xff0c;不负期待姗姗来迟的5系25大技…

分布式系统消息中间件——RabbitMQ的使用基础篇

前言我是在解决分布式事务的一致性问题时了解到RabbitMQ的&#xff0c;当时主要是要基于RabbitMQ来实现我们分布式系统之间对有事务可靠性要求的系统间通信的。关于分布式事务一致性问题及其常见的解决方案&#xff0c;可以看我另一篇博客。提到RabbitMQ&#xff0c;不难想到的…

小a的旅行计划

来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 小a终于放假了&#xff0c;它想在假期中去一些地方…

吃豆人(luogu 7472/NOI Online 2021 普及组 T2)

正题 luogu 7472 题目大意 给出一个正方形点阵&#xff0c;让你选择两个点&#xff0c;分别向两个方向移动&#xff08;必须是45度&#xff09;&#xff0c;每到一个点就得到该点的贡献&#xff08;不重复得&#xff09;&#xff0c;遇到墙壁反射&#xff0c;问你最大贡献 解…

在 Centos7 用Jexus服务器 运行.Net Core 只需几步

安装 .Net SDK 不需要按照 .net core runtime,sdk 依赖于运行时会自动安装第一步 添加dotnet源sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm第二步 安装 .Net Core可能由于网络原因&#xff0c;下载要耐心等待一段时间,下载完成后…

小球碰撞(理解ing)

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 一个弹球&#xff08;可视为质点&am…

.Net思想篇:为何我们需要思想大洗礼?

前言每当说一件事的时候&#xff0c;我喜欢回溯往事&#xff0c;这样思有所依&#xff0c;文有所凭&#xff0c;才能达到打字如尿崩&#xff0c;一发不可收拾的流畅度。让我们将时光回溯到08年&#xff0c;当时和同学们就有了学java和.net之争&#xff0c;当然不止这些&#xf…

[AGC009B] Tournament(多叉树转二叉树后的最小可能深度)

传送门 把aia_iai​看成faifa_ifai​&#xff0c;建出一棵多叉树&#xff0c;再把多叉树转成二叉树&#xff0c;转出来的每棵二叉树对应着一种比赛方式。 以n8,a2,...,81,1,2,4,3,3,3n8,a_{2,...,8}1,1,2,4,3,3,3n8,a2,...,8​1,1,2,4,3,3,3为例&#xff0c; 多叉树转出的二…

C# 8中的Async Streams

关键要点异步编程技术提供了一种提高程序响应能力的方法。Async/Await模式在C# 5中首次亮相&#xff0c;但只能返回单个标量值。C# 8添加了异步流&#xff08;Async Streams&#xff09;&#xff0c;允许异步方法返回多个值&#xff0c;从而扩展了其可用性。异步流提供了一种用…

asp.net core webapi项目配置全局路由

一、前言在开发项目的过程中&#xff0c;我新创建了一个controller&#xff0c;发现vs会给我们直接在controller头添加前缀&#xff0c;比如[Route("api/[controller]")],即在访问接口的时候会变成http://localhost:8000/api/values&#xff0c;但是如果控制器有很多…

C Looooops POJ - 2115

C Looooops POJ - 2115 题目&#xff1a; A Compiler Mystery: We are given a C-language style for loop of type statement; I.e., a loop which starts by setting variable to value A and while variable is not equal to B, repeats statement followed by increasing …

IdentityServer4实战 - 谈谈 JWT Token 的安全策略

一.前言众所周知&#xff0c;IdentityServer4 默认支持两种类型的 Token&#xff0c;一种是 Reference Token&#xff0c;一种是 JWT Token 。前者的特点是 Token 的有效与否是由 Token 颁发服务集中化控制的&#xff0c;颁发的时候会持久化 Token&#xff0c;然后每次验证都需…

使用.Net Core实现FNV分布式hash一致性算法

说到FNV哈希算法不得不提Memcached&#xff0c;我们先简单介绍一下Memcached。MemcachedMemcached分为客户端与服务端&#xff0c;Memcached是服务端&#xff0c;服务端本身不提供分布式实现&#xff0c;只是一个单独的k-v缓存&#xff1b;Memcached的分布式是在客户端类库中实…

[XSY4197] Snow(树形DP)

我们在树上的每个点iii上放aia_iai​个小点&#xff0c;初始时先让每个点单独减&#xff0c;这样要花费aia_iai​之和的次数。 然后尝试把某些减合并。一个点上面的小点至多可以向两个相邻的小点连边&#xff08;这两个小点不能在同一个点上&#xff09;。每连一条边&#xff…

Followme Devops实践之路

引言天下武功,唯快不破想要提高开发团队效率&#xff0c;势必要有一套完整而成熟的开发流程方案&#xff0c;除了sprint迭代开发模式之外,还有近几年流行的devops流程,都是可以大幅度提高开发效率的工具. 我们团队也不断探索、实践&#xff0c;最终形成了现有的一套体系&#x…

基环树小记

概念 基环树就是有n个点n条边的图&#xff08;比树多出现一个环&#xff09;。 特殊形态的基环树 无向树(N点N边无向图) 外向树(每个点只有一条入边) 内向树(每个点只有一条出边) 以上三种树有十分优秀的性质&#xff0c;就是可以直接将环作为根。就可以对每个环的子树进行单…

利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能

事由&#xff1a;这两天mentor给我布置了个任务让我用BenchmarkDotNet工具去测试一下同一个API 用同步和异步方法写性能上有什么差别。顺带提一下&#xff1a;啊啊啊啊 等我仔细看文档的时候文档 发现它让我用Release的模式去运行benchmark。 emmm...其实我之前一直在用Debug模…