pike

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2018 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// HeaderXForwardedFor x-forwarder-for header
	HeaderXForwardedFor = "X-Forwarded-For"
	// HeaderXRealIP x-real-ip header
	HeaderXRealIP = "X-Real-IP"
	// HeaderIfModifiedSince if-modified-since header
	HeaderIfModifiedSince = "If-Modified-Since"
	// HeaderIfNoneMatch if-none-match header
	HeaderIfNoneMatch = "If-None-Match"
	// HeaderContentEncoding content-encoding header
	HeaderContentEncoding = "Content-Encoding"
	// HeaderETag http response etag
	HeaderETag = "ETag"
	// HeaderLastModified last-modified header
	HeaderLastModified = "Last-Modified"
	// HeaderCacheControl http response cache control header
	HeaderCacheControl = "Cache-Control"
	// HeaderContentLength content-length header
	HeaderContentLength = "Content-Length"
	// HeaderSetCookie http set cookie header
	HeaderSetCookie = "Set-Cookie"
	// HeaderContentType http content-type header
	HeaderContentType = "Content-Type"
	// HeaderServerTiming http response server timing
	HeaderServerTiming = "Server-Timing"
	// HeaderAge http age header
	HeaderAge = "Age"
	// HeaderAcceptEncoding http accept-encoding header
	HeaderAcceptEncoding = "Accept-Encoding"
	// HeaderXStatus http x-status response header
	HeaderXStatus = "X-Status"
	// GzipEncoding gzip encoding
	GzipEncoding = "gzip"
	// BrEncoding br encoding
	BrEncoding = "br"
	// JSONContent json content-type
	JSONContent = "application/json; charset=utf-8"
)
View Source
const (
	// ServerTimingPike pike
	ServerTimingPike = iota
	// ServerTimingInitialization init中间件
	ServerTimingInitialization
	// ServerTimingIdentifier identifier中间件
	ServerTimingIdentifier
	// ServerTimingDirectorPicker director picker中间件
	ServerTimingDirectorPicker
	// ServerTimingCacheFetcher cache fetcher中间件
	ServerTimingCacheFetcher
	// ServerTimingProxy proxy中间件
	ServerTimingProxy
	// ServerTimingHeaderSetter header setter中间件
	ServerTimingHeaderSetter
	// ServerTimingFreshChecker fresh checker中间件
	ServerTimingFreshChecker
	// ServerTimingDispatcher dispatcher中间件
	ServerTimingDispatcher
	// ServerTimingEnd server timing end
	ServerTimingEnd
)

Variables

View Source
var (

	// NoopNext no op next function
	NoopNext = func() error {
		return nil
	}
	// ErrTargetURLNotInit target url map未初始化
	ErrTargetURLNotInit = NewHTTPError(http.StatusNotImplemented, "target url is not init")
	// ErrParseBackendURLFail 生成backend url失败
	ErrParseBackendURLFail = NewHTTPError(http.StatusNotImplemented, "parse backend url fail")
)

Functions

func AddPolicySelectFunc

func AddPolicySelectFunc(policy string) (err error)

AddPolicySelectFunc 增加新的policy选择函数

func AddSelect

func AddSelect(name string, fn SelectFunc)

AddSelect 增加select的处理函数

func AddSelectByCookie

func AddSelectByCookie(name, cookieName string)

AddSelectByCookie 根据cookie来选择backend

func AddSelectByHeader

func AddSelectByHeader(name, headerField string)

AddSelectByHeader 根据http header的字段来选择

Types

type Context

type Context struct {
	Request        *http.Request
	Response       *Response
	ResponseWriter http.ResponseWriter
	ServerTiming   *ServerTiming
	// Status 该请求的状态 fetching pass等
	Status int
	// Identity 该请求的标记
	Identity []byte
	// Director 该请求对应的director
	Director *Director
	// Resp 该请求的响应数据
	Resp *cache.Response
	// Fresh 是否fresh
	Fresh bool
	// CreatedAt 创建时间
	CreatedAt time.Time
}

Context context

func NewContext

func NewContext(req *http.Request) (c *Context)

NewContext 创新新的Context并重置相应的属性

func (*Context) Error

func (c *Context) Error(err error)

Error 出错处理

func (*Context) JSON

func (c *Context) JSON(data interface{}, status int) error

JSON 返回json

func (*Context) RealIP

func (c *Context) RealIP() string

RealIP 客户端真实IP

func (*Context) Reset

func (c *Context) Reset()

Reset 重置context

type Director

type Director struct {
	// 名称
	Name string `json:"name"`
	// backend的选择策略
	Policy string `json:"policy"`
	// ping设置(检测backend是否要用)
	Ping string `json:"ping"`
	// backend列表
	Backends []string `json:"backends"`
	// 可用的backend列表(通过ping检测)
	AvailableBackends []string `json:"availableBackends"`
	// host列表
	Hosts []string `json:"hosts"`
	// url前缀
	Prefixs []string `json:"prefixs"`
	// Rewrites 需要重写的url配置
	Rewrites []string `json:"rewrites"`
	// RequestHeader 需要设置的请求头
	RequestHeader []string `json:"-"`
	// RequestHeaderMap 请求头
	RequestHeaderMap map[string]string `json:"requestHeader"`
	// Header 需要设置的响应头
	Header []string `json:"-"`
	// HeaderMap 响应头
	HeaderMap map[string]string `json:"header"`
	// RewriteRegexp 需要重写的正则匹配
	RewriteRegexp map[*regexp.Regexp]string `json:"-"`
	// 优先级
	Priority int `json:"priority"`
	// 读写锁
	sync.RWMutex

	// transport 指定transport
	Transport *http.Transport `json:"-"`
	// TargetURLMap 每个backend对应的URL对象
	TargetURLMap map[string]*url.URL `json:"-"`
	// contains filtered or unexported fields
}

Director 服务器列表

func (*Director) AddAvailableBackend

func (d *Director) AddAvailableBackend(backend string)

AddAvailableBackend 增加可用backend列表

func (*Director) AddBackend

func (d *Director) AddBackend(backend string)

AddBackend 增加backend

func (*Director) AddHost

func (d *Director) AddHost(host string)

AddHost 添加host

func (*Director) AddPrefix

func (d *Director) AddPrefix(prefix string)

AddPrefix 增加前缀

func (*Director) GenHeaderMap

func (d *Director) GenHeaderMap()

GenHeaderMap 生成响应头的header

func (*Director) GenRequestHeaderMap

func (d *Director) GenRequestHeaderMap()

GenRequestHeaderMap 生成请求头

func (*Director) GenRewriteRegexp

func (d *Director) GenRewriteRegexp()

GenRewriteRegexp 生成重写url的正则

func (*Director) GetAvailableBackends

func (d *Director) GetAvailableBackends() []string

GetAvailableBackends 获取可用的backend

func (*Director) GetTargetURL

func (d *Director) GetTargetURL(backend *string) (*url.URL, error)

GetTargetURL 获取backend对应的*URL

func (*Director) HealthCheck

func (d *Director) HealthCheck()

HealthCheck 对director下的服务器做健康检测

func (*Director) Match

func (d *Director) Match(host, uri string) (match bool)

Match 判断是否符合

func (*Director) Prepare

func (d *Director) Prepare()

Prepare 调用生成、刷新配置

func (*Director) RefreshPriority

func (d *Director) RefreshPriority()

RefreshPriority 刷新优先级计算

func (*Director) RemoveAvailableBackend

func (d *Director) RemoveAvailableBackend(backend string)

RemoveAvailableBackend 删除可用的backend

func (*Director) RemoveBackend

func (d *Director) RemoveBackend(backend string)

RemoveBackend 删除backend

func (*Director) RemoveHost

func (d *Director) RemoveHost(host string)

RemoveHost 删除host

func (*Director) RemovePrefix

func (d *Director) RemovePrefix(prefix string)

RemovePrefix 删除前缀

func (*Director) Select

func (d *Director) Select(c *Context) string

Select 根据Policy选择一个backend

func (*Director) SetTransport

func (d *Director) SetTransport(transport *http.Transport)

SetTransport 设置transport

func (*Director) StartHealthCheck

func (d *Director) StartHealthCheck(interval time.Duration)

StartHealthCheck 启用health check

type Directors

type Directors []*Director

Directors 用于director排序

func (Directors) Len

func (s Directors) Len() int

Len 获取director slice的长度

func (Directors) Less

func (s Directors) Less(i, j int) bool

func (Directors) Swap

func (s Directors) Swap(i, j int)

Swap 元素互换

type ErrorHandler

type ErrorHandler func(error, *Context)

ErrorHandler error handle function

type HTTPError

type HTTPError struct {
	Code     int
	Message  interface{}
	Internal error // Stores the error returned by an external dependency
}

HTTPError represents an error that occurred while handling a request. (copy from echo)

func NewHTTPError

func NewHTTPError(code int, message ...interface{}) *HTTPError

NewHTTPError creates a new HTTPError instance.

func (*HTTPError) Error

func (he *HTTPError) Error() string

Error makes it compatible with `error` interface.

type Middleware

type Middleware func(*Context, Next) error

Middleware middleware function

type Next

type Next func() error

Next next function

type Pike

type Pike struct {
	ReadTimeout  time.Duration
	WriteTimeout time.Duration
	ErrorHandler ErrorHandler
	// contains filtered or unexported fields
}

Pike app instance of pike

func New

func New() (p *Pike)

New 创建新的Pike实例

func (*Pike) Close

func (p *Pike) Close() error

Close close the http server

func (*Pike) DefaultErrorHanddler

func (p *Pike) DefaultErrorHanddler(err error, c *Context)

DefaultErrorHanddler 默认的出错处理

func (*Pike) ListenAndServe

func (p *Pike) ListenAndServe(addr string) error

ListenAndServe the http function ListenAndServe

func (*Pike) ServeHTTP

func (p *Pike) ServeHTTP(w http.ResponseWriter, r *http.Request)

handle http server handler function

func (*Pike) Use

func (p *Pike) Use(mids ...Middleware)

Use add middleware function

type Response

type Response struct {
	Committed bool
	// contains filtered or unexported fields
}

Response http response

func NewResponse

func NewResponse() *Response

NewResponse create a response

func (*Response) Bytes

func (w *Response) Bytes() []byte

Bytes get the bytes of response

func (*Response) Header

func (w *Response) Header() http.Header

Header get header

func (*Response) Reset

func (w *Response) Reset()

Reset reset the response sturct

func (*Response) Size

func (w *Response) Size() int

Size get the response size

func (*Response) Status

func (w *Response) Status() int

Status get the response status

func (*Response) Write

func (w *Response) Write(b []byte) (int, error)

Write write buffer

func (*Response) WriteHeader

func (w *Response) WriteHeader(code int)

WriteHeader write header

type SelectFunc

type SelectFunc func(*Context, *Director) uint32

SelectFunc 用于选择排序的方法

type ServerTiming

type ServerTiming struct {
	// contains filtered or unexported fields
}

ServerTiming server timing

func NewServerTiming

func NewServerTiming() *ServerTiming

NewServerTiming create a server timing

func (*ServerTiming) Reset

func (st *ServerTiming) Reset()

Reset 重置

func (*ServerTiming) Start

func (st *ServerTiming) Start(index int) func()

Start 开始server timing的记录

func (*ServerTiming) String

func (st *ServerTiming) String() string

String 获取server timing的http header string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL