Golang Go语言中的MPS 高性能的正向反向代理库

发布于 1周前 作者 songsunli 来自 Go语言

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)

范例

examples

🧬 中间件

中间件可以拦截请求和响应,我们内置实现了多个中间件,包括 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

3 回复

相比较标准库的 ReverseProxy 谁的性能更好一些?

更多关于Golang Go语言中的MPS 高性能的正向反向代理库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


迟到的支持 不错

在Golang(Go语言)生态中,虽然标准库提供了构建正向代理和反向代理的基本工具,但关于“MPS 高性能的正向反向代理库”这一具体库,我并未找到直接相关的信息,这可能是一个特定项目或第三方库,而非Go语言的标准库或广为人知的第三方库。

不过,我可以就Go语言中实现高性能的正向和反向代理给出一些一般性的建议和指导:

  1. 正向代理:通常用于隐藏客户端的真实身份或绕过网络限制。在Go中,可以通过创建一个HTTP服务器,并在该服务器中处理客户端的请求,然后将这些请求转发到目标服务器来实现。
  2. 反向代理:则用于隐藏后端服务器的细节,并可能提供负载均衡、缓存和安全等功能。Go语言的net/http/httputil包中的ReverseProxy结构可以方便地实现反向代理。

为了构建高性能的代理服务器,开发者可以充分利用Go语言的并发模型、轻量级线程(goroutines)以及强大的标准库。此外,还可以考虑使用连接池、缓存等技术来进一步优化性能。

如果你正在寻找一个具体的、高性能的代理库,我建议查阅Go语言的社区资源、第三方库仓库或相关的技术论坛,以获取更多信息和建议。

回到顶部