zoukankan      html  css  js  c++  java
  • fasthttp LBClient 客户端的使用

    fasthttp 不只是一个http server 的包,同时也提供了http client 的功能,以下是关于LBClient
    的简单使用,以及一些说明

    参考代码

    • main.go
     
    package main
    import (
        "flag"
        "fmt"
        "log"
        "strings"
        _ "net/http/pprof"
        "github.com/valyala/fasthttp"
        "github.com/valyala/fasthttp/pprofhandler"
    )
    var (
        add = flag.String("add", "127.0.0.1:8080  127.0.0.1:80", "proxy address")
    )
    type myLog struct {
        lbc *fasthttp.LBClient
    }
    func (l *myLog) Printf(format string, args ...interface{}) {
        log.Printf(format, args...)
    }
    func newLog(add string) *myLog {
        var lbc fasthttp.LBClient
        servers := strings.Split(add, " ")
        for _, addr := range servers {
            if len(addr) > 0 {
                c := &fasthttp.HostClient{
                    Addr: addr,
                }
                lbc.Clients = append(lbc.Clients, c)
            }
        }
        lbc.HealthCheck = func(req *fasthttp.Request, resp *fasthttp.Response, err error) bool {
            fmt.Println(string(resp.Header.Header()))
            if err != nil {
                fmt.Println("err info:", err.Error())
                return false
            }
            return true
        }
        return &myLog{
            lbc: &lbc,
        }
    }
    // load blance client
    func (l *myLog) lbHandler(ctx *fasthttp.RequestCtx) {
        if strings.Contains(string(ctx.Path()), "/debug/pprof") {
            pprofhandler.PprofHandler(ctx)
            return
        }
        l.lbc.Do(&ctx.Request, &ctx.Response)
    }
    func main() {
        flag.Parse()
        fmt.Println(*add)
        mylog := newLog(*add)
        s := fasthttp.Server{
            Handler:      mylog.lbHandler,
            LogAllErrors: true,
            Logger:       mylog,
        }
        s.ListenAndServe(":8000")
    }
    • 说明
      以上代码很简单,主要进行一个lb 请求服务的处理,同时添加了pprof
    • 运行效果
      如果没有问题的化,会有两个默认服务的lb效果

    核心说明

    fasthttp.LBClient 使用了sync.Once功能,所以对于lb 客户的配置,应该首选配置好,不然后边可能不会产生需要的效果
    参考以下代码



    同时使用的时候禁止进行客户端的copy,参考定义(noCopy)

    参考资料

    https://github.com/valyala/fasthttp
    https://pkg.go.dev/github.com/valyala/fasthttp#LBClient

  • 相关阅读:
    偶遇问题
    上机实践
    知识点摸清
    实用脚本
    实用脚本
    对于问题,要打破砂锅问到底,也要懂得不求甚解——不执着于问题本身
    偶遇问题
    知识点摸清
    偶遇问题
    程序员论坛
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14105735.html
Copyright © 2011-2022 走看看