精品为您呈现,快乐和您分享!

移动端

收藏本站

OK下载站

当前位置: 首页 > 软件下载 > 编程开发

fasthttp(快速HTTP包)v1.28.0官方版

fasthttp(快速HTTP包)v1.28.0官方版

类型:编程开发 语言:英文

大小:262KB 更新时间:2021-07-12

推荐指数:

应用简介


fasthttp 是Go 的快速HTTP 包,针对高性能进行了调整,热路径中内存分配为零,比net/http 快10 倍以上。目前,fasthttp已被VertaMedia成功应用于生产,为大家在一台物理服务器上超过150万个并发保活连接提供200Krps服务。









fasthttp 是Go 的快速HTTP 包,针对高性能进行了调整,热路径中内存分配为零,比net/http 快10 倍以上。目前,fasthttp已成功被VertaMedia用于生产,为大家在一台物理服务器上超过150万个并发保活连接提供200K rps服务。



fasthttp(快速HTTP包)



常见问题



为什么要创建另一个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 连接劫持。



比较net/http 的Request.Body 读取和fasthttp 的请求正文读取。



为什么fasthttp 不支持HTTP/2.0 和WebSockets?



HTTP/2.0 支持正在进行中。 WebSocket 已完成。第三方也可以使用RequestCtx.Hijack 来实现这些功能。



与fasthttp 相比,net/http 是否有任何已知的优势?



是的。



net/http 从go1.6 开始支持HTTP/2.0。



net/http 的API 是稳定的,而fasthttp 的API 则在不断发展。



net/http 可以处理更多的HTTP 极端情况。



net/http 应该包含更少的错误,因为它被更多的人使用和测试。



net/http 可以在Go 1.5 及以上版本上运行。



为什么fasthttp API 倾向于返回[]byte 而不是字符串?



因为[]bytes 到string 的转换不是免费的- 它需要内存分配和复制。如果您更喜欢使用字符串而不是字节片,请随意将返回的[]byte 结果包装到string() 中。但请注意,这具有非零开销。



fasthttp支持哪些GO版本?



Go1.5或以上。旧版本将不受支持,因为它们的标准包缺乏有用的功能。



注意:Go 1.9.7 是最旧的测试版。我们建议您尽快更新。从1.11.3 开始,我们将放弃对1.9.x 的支持。



请提供真实的基准数据和服务器信息



请看这个问题。



有计划向fasthttp 添加请求路由吗?



没有计划向fasthttp 添加请求路由。使用支持fasthttp 的第三方路由器和Web 框架。



快速http路由



路由器



框架






阿特雷戈



光纤



变速箱



请参阅此问题以获取更多信息。



我在fasthttp 中检测到数据竞争!



凉爽的!提交错误。但在此之前,请检查代码中的以下内容。



确保从RequestHandler 返回后没有对RequestCtx 或其成员的引用。



确保在从RequestHandler 返回之前调用TimeoutError,如果存在对RequestCtx 或其成员的引用,则可能会被其他goroutine 访问。



我在这里没有找到我的问题的答案



尝试探索这些问题。



变更日志



v1.28.0



620f0c8 添加中间件选项来设置自定义远程地址(#1009) (Lauris BH)。



894272e 修复golangci-lint 操作(#1010) (Lauris BH)。