Golang Go语言中的MPS 高性能的正向反向代理库
Golang Go语言中的MPS 高性能的正向反向代理库
MPS 是一个高性能 HTTP(s)中间代理库,它支持正向代理、反向代理、中间人代理、隧道代理、Websocket 代理.
MPS is a high-performance HTTP(S) proxy library that supports forward proxies, reverse proxies, man-in-the-middle proxies, tunnel proxies, Websocket proxies.
项目地址:https://github.com/telanflow/mps
Feature
- 支持 HTTP(s)代理、正向代理、反向代理、中间人代理、Websocket 代理等
- TCP 连接池、证书池
- 中间件( Middleware )
- 过滤器( Filter)
范例
🧬 中间件
中间件可以拦截请求和响应,我们内置实现了多个中间件,包括 BasicAuth
func main() {
proxy := mps.NewHttpProxy()
proxy.Use(mps.MiddlewareFunc(func(req *http.Request, ctx *mps.Context) (*http.Response, error) {
log.Printf("[INFO] middleware -- %s %s", req.Method, req.URL)
return ctx.Next(req)
}))
proxy.UseFunc(func(req *http.Request, ctx *mps.Context) (*http.Response, error) {
log.Printf("[INFO] middleware -- %s %s", req.Method, req.URL)
resp, err := ctx.Next(req)
if err != nil {
return nil, err
}
log.Printf("[INFO] resp -- %d", resp.StatusCode)
return resp, err
})
log.Fatal( http.ListenAndServe(":8080", proxy))
}
♻️ 过滤器
过滤器可以对请求和响应进行筛选,统一进行处理。 它基于中间件实现。
func main() {
proxy := mps.NewHttpProxy()
// request Filter Group
reqGroup := proxy.OnRequest(mps.FilterHostMatches(regexp.MustCompile("^.*$")))
reqGroup.DoFunc(func(req *http.Request, ctx *mps.Context) (*http.Request, *http.Response) {
log.Printf("[INFO] req -- %s %s", req.Method, req.URL)
return req, nil
})
// response Filter Group
respGroup := proxy.OnResponse()
respGroup.DoFunc(func(resp *http.Response, err error, ctx *mps.Context) (*http.Response, error) {
if err != nil {
log.Printf("[ERRO] resp -- %s %v", ctx.Request.Method, err)
return nil, err
}
log.Printf("[INFO] resp -- %d", resp.StatusCode)
return resp, err
})
log.Fatal( http.ListenAndServe(":8080", proxy))
}
更多关于Golang Go语言中的MPS 高性能的正向反向代理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
相比较标准库的 ReverseProxy 谁的性能更好一些?
更多关于Golang Go语言中的MPS 高性能的正向反向代理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
迟到的支持 不错
在Golang(Go语言)生态中,虽然标准库提供了构建正向代理和反向代理的基本工具,但关于“MPS 高性能的正向反向代理库”这一具体库,我并未找到直接相关的信息,这可能是一个特定项目或第三方库,而非Go语言的标准库或广为人知的第三方库。
不过,我可以就Go语言中实现高性能的正向和反向代理给出一些一般性的建议和指导:
- 正向代理:通常用于隐藏客户端的真实身份或绕过网络限制。在Go中,可以通过创建一个HTTP服务器,并在该服务器中处理客户端的请求,然后将这些请求转发到目标服务器来实现。
- 反向代理:则用于隐藏后端服务器的细节,并可能提供负载均衡、缓存和安全等功能。Go语言的
net/http/httputil
包中的ReverseProxy
结构可以方便地实现反向代理。
为了构建高性能的代理服务器,开发者可以充分利用Go语言的并发模型、轻量级线程(goroutines)以及强大的标准库。此外,还可以考虑使用连接池、缓存等技术来进一步优化性能。
如果你正在寻找一个具体的、高性能的代理库,我建议查阅Go语言的社区资源、第三方库仓库或相关的技术论坛,以获取更多信息和建议。