简体   繁体   English

测量 Go 中的反向代理响应时间

[英]Measuring reverse proxy response times in Go

I have a web reverse proxy based on http/net.我有一个基于 http/net 的 web 反向代理。 I'm using NewSingleHostReverseProxy function.我正在使用 NewSingleHostReverseProxy function。 How can I measure response times of target web server?如何测量目标 web 服务器的响应时间?

You could do something like this.你可以做这样的事情。 Wrap the proxy.Transport with another http.Roundtripper implementation that times how long it takes RoundTrip to respond.proxy.Transport与另一个http.Roundtripper实现包装在一起,计算 RoundTrip 响应所需的时间。

I think this will generally show you "response time".我认为这通常会向您显示“响应时间”。 Not "request time", since the body can still be read from the response, so the request could still be ongoing, but this should show you roughly how long it takes the server to respond to the request.不是“请求时间”,因为仍然可以从响应中读取正文,因此请求可能仍在进行中,但这应该大致显示服务器响应请求所需的时间。

package main

import (
    "fmt"
    "net/http"
    "net/http/httputil"
    "net/url"
    "time"
)

func main() {
    url, _ := url.Parse("https://stackoverflow.com")
    proxy := httputil.NewSingleHostReverseProxy(url)
    proxy.Transport = NewTimingRoundtripper(http.DefaultTransport)
}

type TimingRoundtripper struct {
    transport http.RoundTripper
}

func NewTimingRoundtripper(transport http.RoundTripper) http.RoundTripper {
    return TimingRoundtripper{transport: transport}
}

func (rt TimingRoundtripper) RoundTrip(r *http.Request) (resp *http.Response, err error) {
    start := time.Now()
    resp, err = rt.transport.RoundTrip(r)
    fmt.Println("request", r.URL, time.Since(start))
    return resp, err
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM