当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

fasthttp

Go 的快速 HTTP 包
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 不详
投 递 者 喻元龙
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

fasthttp 是 Go 的快速 HTTP 实现,当前在 1M 并发的生产环境使用非常成功,可以从单个服务器进行 100K qps 的持续连接。

HTTP 服务器性能与 net/http 比较

总而言之,fasthttp 比 net/http 快 10 倍

GOMAXPROCS=1

net/http:

$ GOMAXPROCS=1 go test -bench=NetHTTPServerGet -benchmem
PASS
BenchmarkNetHTTPServerGet1ReqPerConn              100000         21211 ns/op        2407 B/op         30 allocs/op
BenchmarkNetHTTPServerGet2ReqPerConn              100000         15682 ns/op        2373 B/op         24 allocs/op
BenchmarkNetHTTPServerGet10ReqPerConn             200000          9957 ns/op        2103 B/op         19 allocs/op
BenchmarkNetHTTPServerGet10000ReqPerConn          200000          8243 ns/op        2034 B/op         18 allocs/op
BenchmarkNetHTTPServerGet1ReqPerConn1KClients      50000         23474 ns/op        2704 B/op         30 allocs/op
BenchmarkNetHTTPServerGet2ReqPerConn1KClients     100000         18124 ns/op        2539 B/op         24 allocs/op
BenchmarkNetHTTPServerGet10ReqPerConn1KClients    100000         11815 ns/op        2689 B/op         19 allocs/op
BenchmarkNetHTTPServerGet10KReqPerConn1KClients   200000          9106 ns/op        2034 B/op         18 allocs/op

fasthttp:

$ GOMAXPROCS=1 go test -bench=kServerGet -benchmem
PASS
BenchmarkServerGet1ReqPerConn                     500000          2495 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet2ReqPerConn                    1000000          1925 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10ReqPerConn                   1000000          1300 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10KReqPerConn                  1000000          1140 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet1ReqPerConn1KClients            500000          2460 ns/op           1 B/op          0 allocs/op
BenchmarkServerGet2ReqPerConn1KClients           1000000          1962 ns/op           1 B/op          0 allocs/op
BenchmarkServerGet10ReqPerConn1KClients          1000000          1340 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10KReqPerConn1KClients         1000000          1180 ns/op           0 B/op          0 allocs/op

GOMAXPROCS=4

net/http:

$ GOMAXPROCS=4 go test -bench=NetHTTPServerGet -benchmem
PASS
BenchmarkNetHTTPServerGet1ReqPerConn-4                200000          5929 ns/op        2434 B/op         30 allocs/op
BenchmarkNetHTTPServerGet2ReqPerConn-4                300000          4153 ns/op        2399 B/op         24 allocs/op
BenchmarkNetHTTPServerGet10ReqPerConn-4               500000          2751 ns/op        2118 B/op         19 allocs/op
BenchmarkNetHTTPServerGet10000ReqPerConn-4            500000          2398 ns/op        2037 B/op         18 allocs/op
BenchmarkNetHTTPServerGet1ReqPerConn1KClients-4       200000          5979 ns/op        2494 B/op         30 allocs/op
BenchmarkNetHTTPServerGet2ReqPerConn1KClients-4       300000          4582 ns/op        2457 B/op         24 allocs/op
BenchmarkNetHTTPServerGet10ReqPerConn1KClients-4      300000          3589 ns/op        2537 B/op         19 allocs/op
BenchmarkNetHTTPServerGet10KReqPerConn1KClients-4     500000          2465 ns/op        2036 B/op         18 allocs/op

fasthttp:

$ GOMAXPROCS=4 go test -bench=kServerGet -benchmem
PASS
BenchmarkServerGet1ReqPerConn-4                      2000000          1094 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet2ReqPerConn-4                      2000000           707 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10ReqPerConn-4                     3000000           417 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10KReqPerConn-4                    5000000           351 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet1ReqPerConn1KClients-4             2000000           916 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet2ReqPerConn1KClients-4             2000000           655 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10ReqPerConn1KClients-4            3000000           404 ns/op           0 B/op          0 allocs/op
BenchmarkServerGet10KReqPerConn1KClients-4           5000000           359 ns/op           0 B/op          0 allocs/op
  • 上一篇文章阐述了fasthttp的workpool原理。除了workerpool,fasthttp还大量使用了别的技巧来提升性能,本文将对典型的技巧予以一一介绍。并在最后介绍fasthttp推荐的一些best practices。 fasthttp使用的技巧 1. 大量使用sync.Pool fasthttp中很多对象都通过使用sync.Pool达到复用的目的,一是减少内存分配,二是减少GC。复用

  • 以前写接口测试的代码,用go自带的http库,当需要高并发的时候,报连接数不够的错误,无法满足要求,查阅相关资料,三方库fasthttp可以很好的支持高并发,区别在于fasthttp使用了连接池,达到了很好的连接复用的效果 源码: fasthttp.AcquireResponse() > AcquireResponse returns an empty Response instance fro

  • fasthttp 据说是目前golang性能最好的http库,相对于自带的net/http,性能说是有10倍的提升,具体介绍可以看看官方介绍: valyala/fasthttp 正好最近需要用到,但是发现网上的资料也不是很多,特别是关于client模块的就更少了,只有一些翻译成中文的文档,于是乎就把关于client的代码研究了一下,总结了一些比较简单的使用方法,测试对比net/http是有一定程度

  • https://my.oschina.net/fuxiaohei/blog/753977 fasthttp 是 Go 的一款不同于标准库 net/http 的 HTTP 实现。fasthttp 的性能可以达到标准库的 10 倍,说明他魔性的实现方式。主要的点在于四个方面: net/http 的实现是一个连接新建一个 goroutine;fasthttp 是利用一个 worker 复用 gorout

  • 项目上遇到一个问题,在json解码接口A返回的数据时,发现竟然解码的是接口B返回的数据,因为项目使用的是fasthttp,怀疑是并发情况下数据被overlap,一查还真是。 fasthttp-repo 响应体数据在并发情况下被overlap的相关issue 相关代码: http.go的func (resp *Response) Body() []byte函数,在323行左右 // Body ret

 相关资料
  • 问题内容: 我想在项目中使用sha256,但是在将objC代码重写为快速代码时遇到了一些麻烦。 这是我的代码 它给我的错误,因为一切都迅速不能转换到,例如。 问题答案: 您必须在和之间进行显式转换,因为Swift不会像(Objective-)C中那样进行隐式转换。 您还必须定义为所需大小的数组。 另外,您可以用来分配所需的缓冲区: Swift 3和4的更新: Swift 5更新:

  • 是否有Node.js即用工具(与一起安装),它将帮助我通过HTTP将文件夹内容作为文件服务器公开。 例如,如果我有 然后在中开始,我可以通过以下方式访问文件 为什么我的节点静态文件服务器丢弃请求?参考一些神秘的 标准node.js静态文件服务器 如果没有这样的工具,我应该使用什么框架? 相关:NodeJS中的基本静态文件服务器

  • 是否有Java即用工具,可以帮助我通过HTTP将文件夹内容公开为文件服务器。 例如,如果我有 然后从我可以通过 当然有雄猫 主要要求是通过脚本安装和启动这样的服务器。

  • 问题内容: 负数的模如何快速工作?当我做(-1%3)时,它给出-1,但余数为2。 问题答案: Swift 余数运算符 计算整数除法的余数: 哪里是截断整数除法。就你而言 因此,余数始终与 股息 相同(除非余数为零)。 这与C99标准中所要求的定义相同,例如参见 [ANSI C或ISOC是否指定了-5%10?。另请参阅 Wikipedia:Modulo操作,以概述如何使用不同的编程语言来处理它。 可

  • 问题内容: 我想将双精度数四舍五入到一定数量的小数,总是四舍五入。 例 四舍五入到.00 => 1.5679999到1.56 四舍五入至.000 => 1.5679999至1.567 我想要一个Double而不是一个连接字符串 问题答案: 只需替换为!

  • 问题内容: 在更新xCode 6之前,我没有问题将双精度型转换为字符串,但是现在它给了我一个错误 它给我错误信息“双精度不能转换为字符串”。还有其他方法吗? 问题答案: 它不是强制转换,而是根据具有格式的值创建字符串。 格式不同:

  • OAuth2单一登录 这是一个具有HTTP基本身份验证和单个用户帐户的Spring Cloud“Hello World”应用程序app.groovy @Grab('spring-boot-starter-security') @Controller class Application { @RequestMapping('/') String home() { 'Hello World

  • Spring Cloud Bus的工作原理是添加Spring Boot自动配置,如果它在类路径中检测到自身。所有您需要做的是启用总线是将spring-cloud-starter-bus-amqp或spring-cloud-starter-bus-kafka添加到您的依赖关系管理中,并且Spring Cloud负责其余部分。确保代理(RabbitMQ或Kafka)可用和配置:在本地主机上运行,​​您