fasthttp是一个针对Go的快速HTTP包,针对高性能进行了调整,实现了热路径内存分配为零,比net/http快10倍以上。目前,fasthttp已经被VertaMedia成功用于生产,每台物理服务器上的并发连接数超过150万。
常见问题
为什么要创建另一个http包而不是优化net/http?
因为net/http API限制了很多优化机会。比如说。
net/http请求对象的生存期不受请求处理器的执行时间的限制。所以服务器必须为每个请求创建一个新的请求对象,而不是像fasthttp那样重用现有的对象。
Net/http头信息存储在map[string][]string中。所以服务器必须解析所有的头信息,将它们从[]字节转换成字符串,并在调用用户提供的请求处理程序之前将它们放入映射中。这些都需要不必要的内存分配,可以避免fasthttp。
Net/http客户端API需要为每个请求创建一个新的响应对象。
为什么fasthttp API与net/http不兼容?
因为net/http API限制了很多优化机会。详情见上面的回答。同时,net/http API的某些部分也是次优的。
比较一下net/http和fasthttp的连接劫持。
比较请求。请求正文读取为fasthttp的net/http的正文读取。
为什么fasthttp不支持HTTP/2.0和WebSockets?
HTTP/2.0支持正在进行中。WebSockets已完成。第三方也可以使用RequestCtx。劫持来实现这些美好的东西。
相对于fasthttp,有没有已知的优势 for net/http?
是
Net/http从go1.6支持HTTP/2.0。
Net/http API是稳定的,而fasthttp API是不断发展的。
Net/http可以处理更多HTTP角。
Net/http应该包含更少的bug,因为它被更多的人使用和测试。
Net/http可以在1.5以上的Go上工作。
为什么fasthttp API倾向于返回[]字节而不是字符串?
因为[]字节到字符串的转换不是免费的——它需要内存分配和复制。如果您喜欢使用字符串而不是字节片,您可以随意将返回的[]字节结果包装为string()。但是,请注意,这里有一个非零的开销。
fasthttp支持哪些GO版本?
Go1.5以上。旧版本将不被支持,因为它们的标准包缺少有用的功能。
注意:Go 1.9.7是最老的测试版本。我们建议你尽快更新。从1.11.3开始,我们将放弃对1.9.x的支持
请提供真实的基准数据和服务器信息。
请看这个问题。
是否有计划向fasthttp添加请求路由?
没有将请求的路线添加到fasthttp的计划。使用第三方路由器和支持fasthttp的web框架。
fasthttp-路由
路由器
结构
镥
阿特雷戈
光学纤维
齿轮箱
有关更多信息,请参见此问题。
我在fasthttp中检测到数据竞争!
酷!记录一个错误。但是在这样做之前,请检查代码中的以下内容。
确保从RequestHandler返回后没有对RequestCtx或其成员的引用。
确保在从RequestHandler返回之前调用TimeoutError。如果存在对RequestCtx或其成员的引用,它可能会被其他goroutine访问。
我在这里没有找到我问题的答案。
试着探讨这些问题。
更新日志
v1.28.0
620f0c8增加了中间件设置自定义远程地址的选项(# 1009) (Laura是BH)。
894272e修复golangci-lint行动(# 1010)(劳拉是BH)。
fasthttp(快速HTTP包)相关下载
- 查看详情Luigi(批处理作业管道)简体2023-01-31
- 查看详情Yoga(跨平台布局引擎)简体2023-01-29
- 查看详情Spug(自动化运维平台)简体2022-12-11
- 查看详情G2Plot(开箱即用的图表库)简体2022-11-28
- 查看详情G2(可视化引擎)简体2022-11-28
- 查看详情 Luigi(批处理作业管道) 英文 2023-01-31
- 查看详情 Yoga(跨平台布局引擎) 英文 2023-01-29
- 查看详情 Spug(自动化运维平台) 简体 2022-12-11
- 查看详情 G2Plot(开箱即用的图表库) 简体 2022-11-28
- 查看详情 G2(可视化引擎) 简体 2022-11-28
- 查看详情 robosim虚拟机器人 简体 2023-02-03
- 查看详情 ANTS Performance Profiler(.NET性能分析工具) 英文 2023-02-03
- 查看详情 Java运行环境(Java SE Runtime Environment) 简体 2023-02-03