Home / Function/ Balancer() — fiber Function Reference

Balancer() — fiber Function Reference

Architecture documentation for the Balancer() function in proxy.go from the fiber codebase.

Entity Profile

Dependency Diagram

graph TD
  1b85ddf7_ff7f_1e1a_8643_baf3cb4c1274["Balancer()"]
  409bdb74_0bb5_be72_7b00_0c1c6089b005["proxy.go"]
  1b85ddf7_ff7f_1e1a_8643_baf3cb4c1274 -->|defined in| 409bdb74_0bb5_be72_7b00_0c1c6089b005
  c2502153_4789_a74e_f3f8_bc71e346f366["Do()"]
  1b85ddf7_ff7f_1e1a_8643_baf3cb4c1274 -->|calls| c2502153_4789_a74e_f3f8_bc71e346f366
  style 1b85ddf7_ff7f_1e1a_8643_baf3cb4c1274 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

middleware/proxy/proxy.go lines 18–109

func Balancer(config ...Config) fiber.Handler {
	// Set default config
	cfg := configDefault(config...)

	// Load balanced client
	lbc := &fasthttp.LBClient{}
	// Note that Servers, Timeout, WriteBufferSize, ReadBufferSize and TLSConfig
	// will not be used if the client are set.
	if cfg.Client == nil {
		// Set timeout
		lbc.Timeout = cfg.Timeout
		// Scheme must be provided, falls back to http
		for _, server := range cfg.Servers {
			if !strings.HasPrefix(server, "http") {
				server = "http://" + server
			}

			u, err := url.Parse(server)
			if err != nil {
				panic(err)
			}

			client := &fasthttp.HostClient{
				NoDefaultUserAgentHeader: true,
				DisablePathNormalizing:   true,
				Addr:                     u.Host,

				ReadBufferSize:  cfg.ReadBufferSize,
				WriteBufferSize: cfg.WriteBufferSize,

				TLSConfig: cfg.TLSConfig,

				DialDualStack: cfg.DialDualStack,
			}

			lbc.Clients = append(lbc.Clients, client)
		}
	} else {
		// Set custom client
		lbc = cfg.Client
	}

	// Return new handler
	return func(c fiber.Ctx) error {
		// Don't execute middleware if Next returns true
		if cfg.Next != nil && cfg.Next(c) {
			return c.Next()
		}

		// Set request and response
		req := c.Request()
		res := c.Response()

		if !cfg.KeepConnectionHeader {
			// Don't proxy "Connection" header
			req.Header.Del(fiber.HeaderConnection)
		}

		// Modify request
		if cfg.ModifyRequest != nil {
			if err := cfg.ModifyRequest(c); err != nil {
				return err
			}
		}

		if c.App().Config().Immutable {
			req.SetRequestURIBytes(req.RequestURI())
		} else {
			req.SetRequestURI(utils.UnsafeString(req.RequestURI()))
		}

		// Forward request
		if err := lbc.Do(req, res); err != nil {
			return err
		}

		if !cfg.KeepConnectionHeader {
			// Don't proxy "Connection" header
			res.Header.Del(fiber.HeaderConnection)
		}

Domain

Subdomains

Calls

Frequently Asked Questions

What does Balancer() do?
Balancer() is a function in the fiber codebase, defined in middleware/proxy/proxy.go.
Where is Balancer() defined?
Balancer() is defined in middleware/proxy/proxy.go at line 18.
What does Balancer() call?
Balancer() calls 1 function(s): Do.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free