问题标签 [fasthttp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
789 浏览

go - 用于 gRPC 调用的 Goroutines

我正在尝试为github.com/buaazp/fasthttprouter调用 gRPC 后端的 gRPC 代理服务(基于)做一个小原型

我的原型基于gRPC helloworld 示例

结果是:

  • 使用 goroutine 的 http 调用给了我 14K rps
  • 没有 goroutine 的 http 调用只有 8K rps

我的问题:

  • 那是正确的样本吗?
  • 我是否需要使用 goroutine 包装运行所有 api 调用?
0 投票
0 回答
154 浏览

go - 了解响应时间成本

我是 Golang 的新手,正在尝试使用 json 响应编写简单的 Web 服务器。端点之一是用于数据库访问。使用类静态响应(如任何静态字符串或简单数据转换)的平均响应时间约为 0s(<1ms)。如果我添加一些数据库请求,平均时间会增加到 250 毫秒,并且不取决于函数内容。所以我试图了解这个功能的时间。

我已经知道的:

  1. 查询数据库大约需要 40-50 毫秒
  2. 日期时间转换成本 >1ms
  3. json.Marshal成本<1ms
  4. string(json.Marshal)<1ms

我所有的问题都在rows.Next()

  1. 所有内部rows.Next()成本分别<1ms
  2. 每个row.Next()过程的成本取决于行长,大约为 10-50ms。

如果我理解db.Query()在一个请求中获取所有行并将其保存在内存中,提供虚拟游标作为迭代器(.Next())。为什么要花这么多钱?

  1. 所有row.Next()数据处理大约需要 180ms。加上40 毫秒db.Query,它大约等于总响应时间(~240 毫秒)
  2. 如果我评论所有row.Next()周期并且只做出db.Query总响应仍然需要 200-240 毫秒

我使用的软件包:

我可以期望 Web 服务器响应时间与数据库请求时间有关吗?

更新。

我用“github.com/kshvakov/clickhouse”尝试了“github.com/jmoiron/sqlx”,结果是一样的;只有语法改变了。

我还尝试了“github.com/mailru/go-clickhouse”和“database/sql”。它提供了对 clickhouse 的 HTTP 接口的访问。我按预期在一个请求中获得了所有行,但是 http 请求大约需要 240 毫秒,数据处理大约需要 0 毫秒。所以我正在寻找机会保持 tcp 连接打开,以便能够在一个请求中获取所有 nessasery 行并工作使用我的程序端内存缓冲区(与 tcp/socket 缓冲区组合有一些缓冲区限制)。

更新 2。

好的,我已经尝试过原生 clickhouse 客户端(和其他类似的 DBeaver),大约 250 毫秒是这个请求的限制。但这可能只是clickhouse原生tcp接口的限制。但是什么是 40-50ms db.Query() 操作,它不返回任何行。是服务器端查询的时间吗?或者只是查询字符串检查?

0 投票
1 回答
510 浏览

go - 提供 http 服务的打开文件过多

我有以下代码

在多核 CPU 上服务几个请求后(每秒大约有 4000-6000 个请求),我收到太多文件打开错误和响应时间,CPU 超出限制。(CPU可能会很高,因为我将字节转换为字符串几次以替换几个字符?有什么建议吗?)

我看到其他关于关闭 req/res 正文和/或将 sysctl 或 ulimit 设置为更高值的问题,我确实遵循了这些问题,但我总是以错误告终。

服务器上的配置:

我需要代码以毫秒为单位做出响应,但是当 cpu 很高时,它最多需要 50 秒。

尝试了 net/http 和 fast http,但没有任何改进。我的 Node.js 请求 npm 在同一台服务器上完美地完成了所有工作。处理这些连接或改进所需的代码更改的最佳方法是什么。

0 投票
1 回答
80 浏览

http - 使用“+=”缓慢构建长字符串

我的 http 响应性能很慢

使用 Go 和 Fasthttp

并在 Insomnia (Postman) 中进行测试。执行时间 3-4 秒。PHP 上的类似代码在 900 毫秒内执行。

PHP 图像

戈朗形象

0 投票
1 回答
354 浏览

go - 在 fasthttp 中上传尺寸大于 DefaultMaxRequestBodySize 的文件

我找不到上传尺寸大于DefaultMaxRequestBodySize. 你能分享一下如何使用上传大文件fasthttp吗?

不幸的是,我收到了错误body size exceeds the given limit

0 投票
0 回答
375 浏览

go - FastHttp 服务器“删除”授权标头

编辑:固定。看看有什么问题,看看这个

当我尝试使用 Authorization 标头向 FastHttp 服务器发送请求时,标头会被删除。当我使用 Postman 发送请求时,Authorization 标头不会被删除。

为了查看实际发送了哪些标头,我设置了一个 Undertow Web 服务器(Java)并将我的请求发送到该服务器。

Java网络服务器的代码:

当我使用 Postman 发送请求时的输出:

当我使用我的应用程序发送请求时输出:

在这两种情况下,都会发送授权标头,但是当我将请求发送到 FastHttp 服务器时,只有来自 Postman 的请求包含标头。

我很困惑,为什么会发生这种情况?

0 投票
1 回答
1420 浏览

go - 读取请求标头时出现 Fasthttp 错误:标头键“http/1.1\r\nuser-Agent”无效

我刚开始学习围棋,这个问题让我卡住了。尝试使用 github.com/valyala/fasthttp 在测试 func 中测试本地主机上的请求处理。首先在https://github.com/valyala/fasthttp/blob/master/server_example_test.go中运行服务器:

那么如果我从同一个测试函数运行请求函数(FastRequest(url string))它工作正常......

Fasthttp请求函数:

但我真正需要测试的是从我的对象发送一个请求,它在 goroutine 中实现了相同的 FastRequest 方法。在这里我收到了这个错误信息:

在 FastRequest 中,我没有指定任何用户代理,FastRequest() 函数是相同的。只是函数调用的地方不同。是否在 goroutine 中调用并不重要。

那么,fasthttp.RequestCtx 无法解析自己的头部?或者发生了什么?

==================================================== ======================== 另外,我应该补充一点,在第一种情况下,当我将其更改为 1.8 时,我使用了 fasthttp v1.6.0。 0 错误是:

最后,问题出在 URL 末尾添加的“/n”中,它适用于真实服务器,但我的小型 localhost 服务器无法处理。

0 投票
1 回答
826 浏览

go - 如何在 Go 中创建 HTTP 会话

我目前正在使用 fasthttp 发送我的请求我的问题是,有没有办法进行持久会话?我需要粘贴 cookie 和数据。

c := fasthttp.Client{ Name: "Add To Cart",}

0 投票
1 回答
356 浏览

go - 使用 fasthttp 库为维护的会话保存 cookie

我最近一直在拔头发,我需要找到一种在向 URI 发送请求后保存 cookie 的方法,以便我可以将请求发送到其他端点并维护该会话。我正在尝试将商品添加到购物车,但不保存 cookie,购物车将为空。(购物车)我目前正在使用它来处理 cookie,但似乎没有将 cookie 转发到下一个请求:

}

0 投票
1 回答
2283 浏览

http - 正确使用 fasthttp.Client 结合 goroutines

我是 Go 新手,正在寻找使用 goroutine 的正确net/http方法fasthttp。不幸的是,那里没有很多fasthttp客户示例。

我找到了以下代码:(Example1

在这段代码中,开发人员在函数中创建了一个fasthttp.Client实例,并使用. 据我了解,这样您创建一个实例,所有请求都使用这个实例来完成这项工作。main()go grabPage(c, ...)

在另一个页面上,开发人员使用了类似的东西:(Example2

最大的问题是,两种解决方案都正确吗?还是 Example2 解决方案真的创建了一个新实例并为每个 goroutine 使用了大量内存?

我为我的问题从片段中制作了示例,在 Example2 中肯定defer丢失了。这不是问题的一部分。

一个小问题: (fastClient *fasthttp.Client, i int, wg *sync.WaitGroup)-> fastClient 和 wg 是指针,那么为什么调用grabPage(c, index, &wg)而不是grabPage(&c, index, &wg)呢?