我有一个简单的代码,可为文本文件(url_list.txt)中列出的每个URL打印GET响应时间。
当顺序触发请求时,返回的时间对应于各个URL的预期响应时间。
但是,当同时执行相同的代码时,返回的响应时间通常比预期的要高。
看来我在http.Get(url)调用之前捕获的 time_start
并不是实际发送请求的时间。我猜http.Get(url)的执行排队了一段时间。
使用goroutine时,是否有更好的方法来捕获URL响应时间?
这是我的代码:
顺序请求:
package main
import ("fmt"
"net/http"
"io/ioutil"
"time"
"strings"
)
func get_resp_time(url string) {
time_start := time.Now()
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(time.Since(time_start), url)
}
func main() {
content, _ := ioutil.ReadFile("url_list.txt")
urls := strings.Split(string(content), "\n")
for _, url := range urls {
get_resp_time(url)
//go get_resp_time(url)
}
//time.Sleep(20 * time.Second)
}
并发请求:
package main
import ("fmt"
"net/http"
"io/ioutil"
"time"
"strings"
)
func get_resp_time(url string) {
time_start := time.Now()
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(time.Since(time_start), url)
}
func main() {
content, _ := ioutil.ReadFile("url_list.txt")
urls := strings.Split(string(content), "\n")
for _, url := range urls {
//get_resp_time(url)
go get_resp_time(url)
}
time.Sleep(20 * time.Second)
}
您正在一次启动所有请求。如果文件中有1000个url,则您一次要启动1000个go例程。这可能有效,但可能会给您有关套接字或文件句柄不足的错误。我建议一次启动一定数量的抓取操作,例如下面的代码。
这也将有助于时间安排。
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
"sync"
"time"
)
func get_resp_time(url string) {
time_start := time.Now()
resp, err := http.Get(url)
if err != nil {
log.Printf("Error fetching: %v", err)
}
defer resp.Body.Close()
fmt.Println(time.Since(time_start), url)
}
func main() {
content, _ := ioutil.ReadFile("url_list.txt")
urls := strings.Split(string(content), "\n")
const workers = 25
wg := new(sync.WaitGroup)
in := make(chan string, 2*workers)
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for url := range in {
get_resp_time(url)
}
}()
}
for _, url := range urls {
if url != "" {
in <- url
}
}
close(in)
wg.Wait()
}
向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,
我有一个web服务,它接收JSON格式的数据,处理数据,然后将结果返回给请求者。 我想使用度量请求、响应和总时间。 我的示例请求如下所示: 目前我在Linux中使用命令来度量这个值: 但是time命令只测量总时间--这不是我想要的。 是否有任何方法可以使用来度量请求和响应时间?
前言 Networkclient的poll函数: 其实是不断去查询请求是否超时 对 因为长期没有收到请求,设置状态为disconnect,然后希望重新建立连接
本文向大家介绍使用Curl命令查看请求响应时间方法,包括了使用Curl命令查看请求响应时间方法的使用技巧和注意事项,需要的朋友参考一下 curl命令查看请求响应时间 -o:把curl 返回的html、js 写到垃圾回收站[ /dev/null] -s:去掉所有状态 -w:按照后面的格式写出rt time_namelookup:DNS 解析域名www.36nu.com的时间 time_commect
我有一个spring-boot应用程序,它有一个后endpoint,接收请求并将其发送到另一个服务,然后获取响应并将其保存到mongo数据库,然后将响应返回给用户。该应用程序部署在spring boot的嵌入式tomcat上。我使用jmeter查看最大响应时间、吞吐量等。 当我用500个线程从jeter运行测试10分钟时,我的最大时间约为3500毫秒。当我从jeter重复测试时,最大时间会减少到9
我在一个小型LINUX项目中工作,计算CURL和远程网站的请求延迟。 所以我做了一个外壳脚本来自动向远程Apache Webserver发送GET请求。在访问Apache的access.log时,我只找到来自CURL的请求仅由apache接收的时间。 是否也可以将CURL请求的日期发送到apache服务器?(时间戳) 谢谢