我正在写一个压力测试应用程序,我正在使用FSharp.Data来处理像这样的Http请求…… let! x = Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true) 该行被
let! x = Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true)
该行被执行了100次.
看着小提琴手,我很快就耗尽了一些连接或线程,大约30个左右的请求一下子就消失了.之后,应用程序开始变慢,请求的吞吐量看起来与我正在击中的URI的响应性有关.当200回来时,另一个请求就会消失.
包含函数位于async {}块内(因此let!).
我想要做的是完全忽略响应,但如果我将行更改为…
Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true) |> ignore
…根本没有请求发送.我不知道为什么会这样.
我对F#比较陌生,对这个特殊的库(http://fsharp.github.io/FSharp.Data/library/Http.html)来说很新.我有什么选择指示图书馆我不关心响应是什么而不是阻止或者我可以使用该语言来帮助吗?
如果您从同一客户端访问Web服务器,则很可能在服务器上遇到客户端限制. Web服务器只允许来自同一客户端的有限数量的请求是很正常的.进一步的请求排队,仅在其中一个活动请求完成时处理.服务器允许的确切并发客户端请求数取决于特定的服务器软件及其配置方式,但数量通常以单位或双位数来衡量.
我第一次被这个问题所困扰是大约10年前,当时,我得到了2个并发的客户端连接.
请注意,只要来自不同的客户端,Web服务器通常会很乐意处理数千个并发请求.
因此,您无法从单个客户端对基于HTTP的服务进行压力测试.您需要一个分布式客户端组.压力测试很困难.