我有以下预热脚本,该脚本非常适合我的应用程序(具有多个工作进程的IIS应用程序)。需要对24台服务器进行大约1200个请求才能充分预热它们。
我的问题是,由于请求正在等待请求成功返回,因此大约需要25分钟才能完成。
是否有一种方法可以仅触发请求并继续执行而无需等待响应?
这是使用以下命令的powershell即时通讯
:$Site = 'http://myipaddress173.28.36.20:1155/api/uri' #, 'http://173.28.20.78:1155/api/uri'
@($Site) | % {
Write-Host "Warming up $($_)"
$i=0
Do {
$res = Invoke-RestMethod $_ -Method Post -ContentType 'application/json' -Headers @{Authorization="Bearer GHDSBBSXHHX637373dg"; Host="myurl.com"} -Body '{"accountId": 0,"domain":"my","language":"en"}'
Write-Host "$i = $($_)"
$i++
} While ($i -le 1200)
答案 0 :(得分:0)
是的,每个请求都在单独的线程中完成。但是您的命令在这里也与我有关。我假设您实际上并未使用此代码http://myipaddress173.28.36.20:1155/api/uri,并且“ MyIPaddress”是剪切/粘贴错误。
另外,您似乎对实际结果并不真正感兴趣,而这1200似乎只是您试图针对同一地址生成1200次匹配。那真的是你想要的吗?我的建议是:
# Force to an array, even if just one.
$Site = @('http://myipaddress173.28.36.20:1155/api/uri',http://173.28.20.78:1155/api/uri')
@($Site) | % {
Write-Host "Warming up $($_)"
$i=0
$Body = @{
"accountId": 0
"domain":"my"
"language":"en"}
$Headers = @{
Authorization="Bearer GHDSBBSXHHX637373dg"
Host="myurl.com"}
$commands = "Invoke-RestMethod $_ -Method Post -ContentType 'application/json' -Headers $headers -Body $body"
Do {
invoke-command $command -ComputerName localhost
Write-Host "$i = $($_)"
# Suggest adding a sleep here..
# sleep -seconds 1
$i++
} While ($i -le 1200)
现在,这会将1200次发布到特定的URL(如果我正确执行了代码),然后继续浏览下一个。
此功能可以使您的计算机从慢速运行到爬网,因为它在一瞬间就产生了很多许多网站点击(并且可能导致服务器在一段时间内遭受拒绝服务, (但很短)),以及耗尽客户端可以自由建立连接的出站端口数量。