[自翻]fasthttp中文文檔(持續更新)

fasthttp是由valyala編寫的聲稱快於Go官方標準庫net/http包十倍的快速HTTP實現。從各方的性能測試結果來看(評測一評測二),fasthttp做爲當下最快的http Go語言包當之無愧。本着學習、交流的目的,筆者近日起將着手該包文檔的翻譯,但願可以對你們有所幫助。因爲我的水平所限,翻譯過程當中不免出現疏忽遺漏之處,如發現請及時指出,方便勘誤,謝謝。html

原英文文檔請參見:https://godoc.org/github.com/valyala/fasthttpgit


fasthttp包 

import "github.com/valyala/fasthttp"github

fasthttp包提供了快速HTTP服務端及客戶端API。golang

Fasthttp提供的功能以下:web

  *速度優化。在現代硬件上,可輕鬆實現處理超過100K qps,超過100萬的keep-alive長鏈接併發。緩存

  *低內存使用優化。安全

  *經過RequestCtx.Hijack,支持易鏈接升級「Connection:Upgrade」協議。服務器

  *服務端支持請求pipelining流水線操做。能夠從一個網絡包中讀取多個請求,亦能夠從一個網絡包中發送多個響應。這十分利於支撐高負載的REST服務。網絡

  *服務端提供如下反Dos攻擊限制:併發

    *併發鏈接數量限制。

    *每一個客戶端IP併發鏈接數量限制。

    *每一個鏈接請求數限制。

    *請求讀取超時限制。

    *響應寫入超時限制。

    *最大header請求頭大小限制。

    *最大body請求體大小限制。

    *最大請求執行時間限制。

    *最大keep-alive長鏈接生命週期限制。

    *提供早期過濾掉非GET請求功能。

  *諸多額外有用的信息被暴露在請求處理程序handler中:

    *服務端及客戶端地址。

    *每個請求的日誌。

    *惟一的請求id。

    *請求開始時間。

    *鏈接開始時間。

    *當前鏈接的請求序列號。

  *客戶端支持失敗請求自動重發。

  *fasthttp API的設計具備擴展示有客戶端及服務端實現,或從新編寫自定義客戶端及服務端的能力。

func AppendBytesStr(dst []byte, src string) []byte
AppendBytesStr函數用於附加src源字符串至dst目的字節切片中,並返回擴展後的dst目的字節切片結果。
該函數與append(dst, src...)相比並無性能優點。此處保留僅出於向後兼容考慮。
該函數並不推薦使用,將來可能被移除。

func AppendGunzipBytes(dst, src []byte) ([]byte, error)
AppendGunzipBytes函數用於附加gunzip壓縮源src字節切片至dst目的字節切片中,並返回處理後的dst目的字節切片結果及錯誤信息。

func AppendGzipBytes(dst, src []byte) []byte
func AppendGzipBytes函數用於附加gzip壓縮源src字節切片至dst目的字節切片中,並返回處理後的dst目的字節切片。

func AppendGzipBytesLevel(dst, src []byte, level int) []
AppendGzipBytesLevel函數用於以給定壓縮級別附加gzip壓縮源src字節切片至目的字節切片,並返回處理後的dst目的字節切片結果。
支持的壓縮級別:
* compressnocompression 未壓縮
* compressbestspeed 最快速度
* compressbestcompression 最大壓縮比
* compressdefaultcompression 默認壓縮級別

func AppendHTMLEscape(dst []byte, s string) []byte
AppendHTMLEscape函數用於附加含有轉義字符的HTML字符串s至dst目的字節切片中,並返回擴展後的dst目的字節切片結果。

func AppendHTMLEscapeBytes(dst, s []byte) []byte
AppendHTMLEscapeBytes函數用於附加含有轉移字符的HTML字節切片s至dst目的字節切片中,並返回擴展後的dst目的字節切片結果。

func AppendHTTPDate(dst []byte, date time.Time) []byte
AppendHTTPDate函數用於附加符合RFC1123格式的日期time.Time類型date至dst目的字節切片中,並返回擴展後的dst目的字節切片結果。

func AppendIPv4(dst []byte, ip net.IP) []byte
AppendIPv4函數用於附加給定ipv4字符串表達式至dst目的字節切片。並返回擴展後的dst目的字節切片結果。

func AppendNormalizedHeaderKey(dst []byte, key string) []byte
AppendNormalizedHeaderKey函數用於附加正常的header key鍵名字符串至dst目的字節切片,並返回dst目的字節切片結果。
正常的header key以大寫字母開頭,且破折號後的第一個字母一樣爲大寫字母,而其餘字母則由小寫字母表示。例如:
* coNTENT-TYPe -> Content-Type
* HOST -> Host
* foo-bar-baz -> Foo-Bar-Baz

func AppendNormalizedHeaderKeyBytes(dst, key []byte) []byte
AppendNormalizedHeaderKeyBytes函數用於附加正常的header key鍵名字節切片至dst目的字節切片,並返回dst目的字節切片結果。
正常的header key以大寫字母開頭,且破折號後的第一個字母一樣爲大寫字母,而其餘字母則由小寫字母表示。例如:
* coNTENT-TYPe -> Content-Type
* HOST -> Host
* foo-bar-baz -> Foo-Bar-

func AppendQuotedArg(dst, src []byte) []byte
AppendQuotedArg函數用於附加編碼過的url src源字節切片至dst目的字節切片中,並返回附加過的dst目的字節切片結果。

func AppendUint(dst []byte, n int) []byte
AppendUint函數用於附加整型變量n至dst目的字節切片中,並返回擴展後的dst目的字節切片。

func Dial(addr string) (net.Conn, error)
Dial函數使用tcp4撥打給定TCP地址。
該函數與net.Dial相比具備如下附加功能:
*利用DefaultDNSCacheDuration緩存解決TCP尋址,下降了DNS解析器負載。
*其會以輪詢方式撥打全部已解決的TCP地址直到鏈接被創建。若是某些地址暫時沒法訪問,其將會起到做用。
*若是在DefaultDialTimeout秒內鏈接沒法被創建,其將會返回ErrDialTimeout錯誤。
此撥號器用於在傳遞給Client.Dial或HostClient.Dial前,包裝自定義代碼。
例如,每一個主機計數器或及其限制可能經過此種包裝器實現。
傳遞給該函數的地址必需包含端口號。
例如地址值爲:
* foobar.baz:443
* foo.bar:80
* aaa.com:8080

func DialDualStack(addr string) (net.Conn, error)
DialDualStack函數使用tcp4或tcp6撥打給定TCP地址。
該函數與net.Dial相比具備如下附加功能:
*利用DefaultDNSCacheDuration緩存解決TCP尋址,下降了DNS解析器負載。
*其會以輪詢方式撥打全部已解決的TCP地址直到鏈接被創建。若是某些地址暫時沒法訪問,其將會起到做用。
*若是在DefaultDialTimeout秒內鏈接沒法被創建,其將會返回ErrDialTimeout錯誤。使用DialDualStackTimeout自定義撥號超時。
此撥號器用於在傳遞給Client.Dial或HostClient.Dial前,包裝自定義代碼。
例如,每一個主機計數器或及其限制可能經過此種包裝器實現。
傳遞給該函數的地址必需包含端口號。
例如地址值爲:
* foobar.baz:443
* foo.bar:80
* aaa.com:8080

func DialDualStackTimeout(addr string, timeout time.Duration) (net.Conn, error)
DialDualStackTimeout函數會在給定超時時間內使用tcp4或tcp6撥打給定TCP地址。
該函數與net.Dial相比具備如下附加功能:
*利用DefaultDNSCacheDuration緩存解決TCP尋址,下降了DNS解析器負載。
*其會以輪詢方式撥打全部已解決的TCP地址直到鏈接被創建。若是某些地址暫時沒法訪問,其將會起到做用。
此撥號器用於在傳遞給Client.Dial或HostClient.Dial前,包裝自定義代碼。
例如,每一個主機計數器或及其限制可能經過此種包裝器實現。
傳遞給該函數的地址必需包含端口號。
例如地址值爲:
* foobar.baz:443
* foo.bar:80
* aaa.com:8080

func DialTimeout(addr string, timeout time.Duration) (net.Conn, error)
DialTimeout函數會在給定超時時間內使用tcp4撥打給定TCP地址。
該函數與net.Dial相比具備如下附加功能:
*利用DefaultDNSCacheDuration緩存解決TCP尋址,下降了DNS解析器負載。
*其會以輪詢方式撥打全部已解決的TCP地址直到鏈接被創建。若是某些地址暫時沒法訪問,其將會起到做用。
此撥號器用於在傳遞給Client.Dial或HostClient.Dial前,包裝自定義代碼。
例如,每一個主機計數器或及其限制可能經過此種包裝器實現。
傳遞給該函數的地址必需包含端口號。
例如地址值爲:
* foobar.baz:443
* foo.bar:80

func Do(req *Request, resp *Response) error
Do函數用於執行給定HTTP請求,並填充給定HTTP響應。
請求必需是具備完整URL格式(包括scheme及host)且非零的RequestURI,或是非零Host header + RequestURI的形式。
客戶端將根據如下規則決定被請求的服務器:
-若RequestURI包含具備scheme及host的完整URL,將由其決定。
-不然由Host header決定。
該函數不遵循重定向。如需重定向,請使用Get*函數。
若resp爲nil,則響應將被忽略。
若DefaultMaxConnsPerHost所鏈接的請求主機當前出於繁忙狀態,ErrNoFreeConns將被返回。
建議在對性能要求嚴格的代碼中,經過AcquireRequest和AcquireResponse獲取req及resp。

func DoDeadline(req *Request, resp *Response, deadline time.Time) error
DoDeadline函數用於執行給定請求並在規定截止時間deadline前等待響應。
請求必需是具備完整URL格式(包括scheme及host)且非零的RequestURI,或是非零Host header + RequestURI的形式。
客戶端將根據如下規則決定被請求的服務器:
-若RequestURI包含具備scheme及host的完整URL,將由其決定。
-不然由Host header決定。
該函數不遵循重定向。如需重定向,請使用Get*函數。
若resp爲nil,則響應將被忽略。
若直到給定截止時間deadline響應仍未被返回,則ErrTimeout將被返回。
建議在對性能要求嚴格的代碼中,經過AcquireRequest和AcquireResponse獲取req及resp。

func DoTimeout(req *Request, resp *Response, timeout time.Duration) error
DoTimeout函數用於執行給定請求並在給定超時持續時間timeout內等待響應。
請求必需是具備完整URL格式(包括scheme及host)且非零的RequestURI,或是非零Host header + RequestURI的形式。
客戶端將根據如下規則決定被請求的服務器:
-若RequestURI包含具備scheme及host的完整URL,將由其決定。
-不然由Host header決定。
該函數不遵循重定向。如需重定向,請使用Get*函數。
若resp爲nil,則響應將被忽略。
若直到給定超時時間timeout響應仍未被返回,則ErrTimeout將被返回。
建議在對性能要求嚴格的代碼中,經過AcquireRequest和AcquireResponse獲取req及resp。

func EqualBytesStr(b []byte, s string) bool
若string(b)==成立,則EqualBytesStr函數將會返回true。
該函數與string(b)==s相比不具備性能優點。此處保留僅出於向後兼容考慮。
該函數並不推薦使用,將來可能被移除。

func FileLastModified(path string) (time.Time, error)
FileLastModified用於返回最近一次修改文件的時間。

func Get(dst []byte, url string) (statusCode int, body []byte, err error)
Get函數用於附加url字符串內容至dst目的字節切片,並將其返回做爲body主體。
該函數跟隨重定向。如需手動處理重定向,請使用Do*函數。
若dst目的字節切片爲nil,則新body主體緩衝將被分配。

func GetDeadline(dst []byte, url string, deadline time.Time) (statusCode int, body []byte, err error)
GetDeadline函數用於附加url字符串內容至dst目的字節切片中,並將其返回做爲body主體。
該函數跟隨重定向。如需手動處理重定向,請使用Do*函數。
若dst目的字節切片爲nil,則新body主體緩衝將被分配。
若url內容在給定超時時間timeout內沒法被取出,則ErrTimeout將會被返回。

func ListenAndServe(addr string, handler RequestHandler) error
ListenAndServe函數用於服務給定TCP地址addr及給定handler的HTTP請求。

func ListenAndServeTLS(addr, certFile, keyFile string, handler RequestHandler) error
ListenAndServeTLS函數用於服務給定TCP地址addr及給定handler的HTTPS請求。
certFile、keyFile分別爲到TLS證書及密鑰文件的路徑。

func ListenAndServeTLSEmbed(addr string, certData, keyData []byte, handler RequestHandler) error
ListenAndServeTLSEmbed函數用於服務給定TCP地址addr及給定handler的HTTPS請求。
certData與keyData必需包含有效的TLS證書及密鑰數據。

func ListenAndServeUNIX(addr string, mode os.FileMode, handler RequestHandler) error
ListenAndServeUNIX函數用於服務給定UNIX地址addr及給定handler的HTTP請求。
該函數在開始服務前會刪除addr地址現有的文件。
UNIX地址addr的服務器將設置爲給定文件模式。

func NewStreamReader(sw StreamWriter) io.ReadCloser
NewStreamReader函數將會返回一個由sw生成的重放其全部數據的讀取器。
被返回的讀取器可被傳遞到Response.SetBodyStream中。
Close必須在返回的讀取器中全部所需數據被讀取後調用,不然Go協程可能會發生泄漏。
詳情請參見Response.SetBodyStreamWriter。

func ParseByteRange(byteRange []byte, contentLength int) (startPos, endPos int, err error)
ParseByteRange函數用於解析「Range:bytes=...」格式的header請求頭的值。
其聽從 https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 。

func ParseHTTPDate(date []byte) (time.Time, error)
ParseHTTPData函數用於解析聽從RFC1123格式的日期。

func ParseIPv4(dst net.IP, ipStr []byte) (net.IP, error)
ParseIPv4函數用於將ipStr字節切片解析到net.IP類型的dst中,並返回擴展後的dst目的net.IP及錯誤信息。

func ParseUfloat(buf []byte) (float64, error)
ParseUfloat函數用於從buf字節切片中解析無符號浮點數。

func ParseUint(buf []byte) (int, error)
ParseUint函數用於從buf字節切片中解析無符號整數。

func Post(dst []byte, url string, postArgs *Args) (statusCode int, body []byte, err error)
Post函數用於發送攜帶給定POST參數的POST請求到給定url。
響應的body主體將會被附加到dst字節切片中並被返回。
該函數跟隨重定向。如需手動處理重定向,請使用Do*函數。
若dst目的字節切片爲nil,則新body主體緩衝將被分配。
若postArgs爲nil,空POST的body主體將會被髮送。

func ReleaseArgs(a *Args)
ReleaseArgs函數通過AquireArgs返回對象的捕捉到池中。
不要訪問釋放的Args對象,不然將可能發生數據競爭。

func ReleaseByteBuffer(b *ByteBuffer)
ReleaseByteBUffer函數用於返回字節緩衝到池中。
不得接觸返回到池中後的ByteBuffer.B,不然數據競爭將會發生。

func ReleaseCookie(c *Cookie)
ReleaseCookie函數通過AcquireCookie返回Cookie對象的捕捉到池中。
不要訪問釋放的Cookie對象,不然可能發生數據競爭。

func ReleaseRequest(req *Request)
ReleaseRequest函數通過AcquireRequest返回req的捕捉到請求池中。
在返回請求到請求池中後,禁止訪問req及其成員。

func ReleaseResponse(resp *Response)
ReleaseResponse函數通過AcquireResponse返回resp的捕捉到響應池中。
在返回響應到響應池中後,禁止訪問resp及其成員。

func ReleaseURI(u *URI)
ReleaseURI函數通過AcquireURI釋放URI。
不得在釋放URI後使用釋放的URI,不然可能發送數據競爭。

func SaveMultipartFile(fh *multipart.FileHeader, path string) error
SaveMultipartFile函數用於在給定的文件路徑下保存多段文件fh。

func Serve(ln net.Listener, handler RequestHandler) error
Serve函數用於從給定的監聽ln中傳入給定handler。
服務將阻塞直到給定監聽返回永久性錯誤。

func ServeConn(c net.Conn, handler RequestHandler)
ServeConn函數利用給定handler從給定鏈接中服務HTTP請求。
若來此c的全部請求都被成功服務,ServeConn函數將返回nil。不然返回非nil錯誤。
鏈接c必須當即向Write函數發送全部已經過的數據至客戶端。不然請求的處理可能被掛起。
ServeConn函數在返回前需關閉鏈接c。

func ServeFile(ctx *RequestCtx, path string)
ServeFile函數用於返回包含在給定路徑的壓縮文件內容的HTTP響應。
HTTP響應能夠在下列狀況下,包含非壓縮的內容:
*缺乏「Accept-Encoding: gzip」請求頭。
*沒有該文件目錄的寫權限。
若路徑指向目錄,則目錄內容將被返回。
使用ServeFileUncompressed時,無需提供壓縮文件內容。
詳情請參見RequestCtx.SendFile。

func ServeFileBytes(ctx *RequestCtx, path []byte)
ServeFileBytes函數用於返回給定路徑下包含壓縮文件內容的HTTP響應。
HTTP響應能夠在下列狀況下,包含非壓縮的內容:
*缺乏「Accept-Encoding: gzip」請求頭。
*沒有該文件目錄的寫權限。
若路徑指向目錄,則目錄內容將被返回。
使用ServeFileUncompressed時,無需提供壓縮文件內容。
詳情請參見RequestCtx.SendFileBytes。

func ServeFileBytesUncompressed(ctx *RequestCtx, path []byte)
ServeFileBytesUncompressed函數用於返回給定路徑下包含文件內容的HTTP響應。
若路徑指向目錄,則目錄內容被返回。
當服務文件具備良好的壓縮比時,ServeFileBytes可節約網絡流量。
詳情請參見RequestCtx.SendFileBytes。

func ServeFileUncompressed(ctx *RequestCtx, path string)
ServeFileUncompressed函數用於返回給定路徑下包含文件內容的HTTP響應。
若路徑指向目錄,則目錄內容被返回。
當服務文件具備良好的壓縮比時,ServeFile可節約網絡流量。
詳情請參見RequestCtx.SendFile。

func ServeTLS(ln net.Listener, certFile, keyFile string, handler RequestHandler) error
ServeTLS函數利用給定handler服務給定net.Listener中HTTPS請求。
certFile、keyFile分別爲到TLS證書及密鑰文件的路徑。

func ServeTLSEmbed(ln net.Listener, certData, keyData []byte, handler RequestHandler) error
ServeTLSEmbed函數利用給定handler服務給定net.Listner中的HTTS請求。
certData與keyData必需包含有效的TLS證書及密鑰數據。

func StatusMessage(statusCode int) string
StatusMessage函數用於返回給定狀態碼的HTTP狀態信息。

func WriteGunzip(w io.Writer, p []byte) (int, error)
WriteGunzip函數用於寫入未壓縮的字節切片p至寫入器w中,並返回寫入到w中的非壓縮的字節數及錯誤信息。

func WriteGzip(w io.Writer, p []byte) (int, error)
WriteGzip函數用於寫入gzip壓縮的字節切片p至寫入器w中,並返回寫入到w中的壓縮過的字節數及錯誤信息。

func WriteGzipLevel(w io.Writer, p []byte, level int) (int, error)
WriteGzipLevel函數使用給定壓縮級別寫入gzip壓縮的字節切片p至寫入器w中,並返回寫入到w中的壓縮過的字節數及錯誤信息。
支持的壓縮級別:
* compressnocompression 未壓縮
* compressbestspeed 最快速度
* compressbestcompression 最大壓縮比
* compressdefaultcompression 默認壓縮級別

func WriteInflate(w io.Writer, p []byte) (int, error)
WriteInflate函數用於inflate方式寫字節切片p至寫入器w中,並返回寫入到w中非壓縮的字節數及錯誤信息。

func WriteMultipartForm(w io.Writer, f *multipart.Form, boundary string) error
WriteMultipartForm函數用於將給定的多部分表格f的給定邊界boundary中的內容寫入至寫入器w。

type Args

type Args Struct {
  // 包含過濾掉的或未導出的內容
}

Args表明查詢參數。
嚴禁複製Args實例。請新建新實例代替並使用CopyTo函數。
Args實例不得從併發運行的Go協程中使用。

func AcquireArgs() *Args
AcquireArgs函數用於從池中返回一個空的Args對象。
當再也不須要時,返回的Args可能會經過ReleaseArgs被返回到池中。這將會下降GC負載。

func (a *Args) Add(key, value string)
Add函數用於添加「key=value」鍵值對參數。
同一個鍵可容許添加多個值。

func (a *Args) AddBytesK(key []byte, value string)
AddBytesK函數用於添加「key=value」參數。
同一個鍵可容許添加多個值。

func (a *Args) AddBytesKV(key, value []byte)
AddBytesKV函數用於添加「key=value」參數。
同一個鍵可容許添加多個值。

func (a *Args) AddBytesV(key string, value []byte)
AddBytesV函數用於添加「key=value」參數。
同一個鍵可容許添加多個值。

func (a *Args) AppendBytes(dst []byte) []byte
AppendBytes函數用於附加查詢字符串到dst目的字節切片,並返回擴展後的dst目的字符切片結果。

func (a *Args) CopyTo(dst *Args)
CopyTo函數用於賦值全部args到dst目的字符切片中。

func (a *Args) Del(key string)
Del函數經過給定鍵key從查詢參數args中刪除參數。

func (a *Args) DelBytes(key []byte)
DelBytes函數經過給定鍵key從查詢參數args中刪除參數。

func (a *Args) GetUfloat(key string) (float64, error)
GetUfloat函數經過給定鍵key返回無符號浮點數。

func (a *Args) GetUfloatOrZero(key string) float64
GetUfloatOrZero函數經過給定鍵key返回無符號浮點數。
當發生錯誤時,零值被返回。

func (a *Args) GetUint(key string) (int, error)
GetUint函數經過給定鍵key返回無符號整數。

func (a *Args) GetUintOrZero(key string) int
GetUintOrZero函數經過給定鍵key返回無符號整數。
當發生錯誤時,零值被返回。

func (a *Args) Has(key string) bool
若給定鍵key存在於Args中,則Has函數返回ture。

func (a *Args) HasBytes(key []byte) bool
若給定鍵key存在於Args中,則HasBytes函數返回true。

func (a *Args) Len() int
Len函數用於返回查詢參數args的數量。

func (a *Args) Parse(s string)
Parse函數用於解析包含查詢參數的給定字符串string。

func (a *Args) ParseBytes(b []byte)
ParseBytes函數用於解析包含查詢參數的給定字節切片b。

func (a *Args) Peek(key string) []byte
Peek函數用於返回給定鍵key的產訊參數值。
返回值在下一次調用Args前有效。

func (a *Args) PeekBytes(key []byte) []byte
PeekBytes函數用於返回給定鍵key的查詢參數值。
返回值在下一次調用Args前有效。

func (a *Args) PeekMulti(key string) [][]byte
PeekMulti函數用於返回給定鍵key的全部參數值。

func (a *Args) PeekMultiBytes(key []byte) [][]byte
PeekMultiBytes函數用於返回給定鍵key的全部參數值。

func (a *Args) QueryString() []byte
QueryString函數用於返回args的查詢字符串。
返回值在下一次調用Args方法前有效。

func (a *Args) Reset()
Reset函數用於狀況查詢參數args。

func (a *Args) Set(key, value string)
Set函數用於設置「key=value」鍵值對參數。

func (a *Args) SetBytesK(key []byte, value string)
SetBytesK函數用於設置「key=value」鍵值對參數。

func (a *Args) SetBytesKV(key, value []byte)
SetBytesKV函數用於設置「key=value」鍵值對參數。

func (a *Args) SetBytesV(key string, value []byte)
SetBytesV函數用於設置「key=value」鍵值對參數。

func (a *Args) SetUint(key string, value int)
SetUint函數經過給定鍵key設置無符號整數值。

func (a *Args) SetUintBytes(key []byte, value int)
SetUintBytes函數經過給定鍵key設置無符號整數值。

func (a *Args) String() string
String函數用於返回查詢參數args的字符串表示。

func (a *Args) VisitAll(f func(key, value []byte))
VisitAll函數會對於每個存在的arg參數調用函數f。
f函數不得在返回後保留鍵、值的引用。若是你須要在返回後存儲他們,請建立鍵、值的副本。

func (a *Args) WriteTo(w io.Writer) (int64, error)
WriteTo函數用於吸入查詢字符串到寫入器w中。
WriteTo實現了io.WriteTo接口。

type BalancingClient

type BalancingClient interface {
DoDeadline(req *Request, resp *Response, deadline time.Time) error
PendingRequests() int
}

BalancingClient是一個客戶端接口,其可被傳遞給LBClient.Client。

type ByteBuffer

type ByteBuffer bytebufferpool.ByteBuffer

ByteBuffer提供字節緩衝器,其能夠於fasthttp API中以減小內存分配。
使用AcquireByteBuffer可得到一個空的字節緩衝器。
不推薦使用ByteBuffer。請使用 github.com/valyala/bytebufferpool 替代。
例程:

// 該請求handler用於設置「Your-IP」你的IP響應頭
// 「Your IP is <ip>」信息利用ByteBuffer構建響應。
// header將分配爲零值。
yourIPRequestHandler := func(ctx *fasthttp.RequestCtx) {
    b := fasthttp.AcquireByteBuffer()
    b.B = append(b.B, "Your IP is <"...)
    b.B = fasthttp.AppendIPv4(b.B, ctx.RemoteIP())
    b.B = append(b.B, ">"...)
    ctx.Response.Header.SetBytesV("Your-IP", b.B)

    fmt.Fprintf(ctx, "Check response headers - they must contain 'Your-IP: %s'", b.B)

    // 如今即可以安全地釋放字節緩衝器了。
    // 再也不使用。
    fasthttp.ReleaseByteBuffer(b)
}

// 啓動fasthttp服務,並在響應頭中返回你的IP。
fasthttp.ListenAndServe(":8080", yourIPRequestHandler)

func AcquireByteBuffer() *ByteBuffer
AcquireByteBuffer用於從池中返回一個空的字節緩衝器。
獲取字節緩衝器可能會經過調用ReleaseByteBuffer函數而被返回到池中。這會減小字節緩衝器管理所需的內存分配數量。

func (b *ByteBuffer) Reset()
Reset函數用於清空字節緩衝器ByteBuffer.B。

func (b *ByteBuffer) Set(p []byte)
Set函數用於設置字節緩衝器ByteBuffer.B至字節切片p中。

func (b *ByteBuffer) SetString(s string)
SetString函數用於設置字節緩衝器ByteBuffer.B至字符串s中。

func (b *ByteBuffer) Write(p []byte) (int, error)
Write函數用於實現io.Writer寫入器,其用於附加字節切片p至字節緩衝器ByteBuffer.B中。

func (b *ByteBuffer) WriteString(s string) (int, error)
WriteString函數用於附加字符串s至字節緩衝器ByteBuffer.B中。

type Client

type Client struct {

    // 客戶端名稱。用於請求頭User-Agent中。
    //
    // 若是未設置,將使用默認客戶端名稱。
    Name string

    // 經過回調創建到主機的新鏈接。
    //
    // 若是未設置,將使用默認的Dial函數。
    Dial DialFunc

    // 若設置爲true,會嘗試鏈接到IPv4和IPv6地址。
    //
    // 僅當默認TCP dialer被使用時,此選項被使用,即Dial爲空白時。
    //
    // 因爲在不少地方IPv6網絡仍未普及,默認狀況下客戶端只鏈接到IPv4地址。
    //
    DialDualStack bool

    // 用於https鏈接的TLS配置。
    //
    // 若未設置,將使用默認TLS配置。
    TLSConfig *tls.Config

    // 在每一個主機上可能被創建的最大鏈接數。
    //
    // 若未設置,將使用DefaultMaxConnsPerHost。
    MaxConnsPerHost int

    // 在此持續時間後,空閒的keep-alive鏈接將被關閉。
    //
    // 在默認空閒鏈接被關閉前,DefaultMaxIdleConnDuration以後。
    MaxIdleConnDuration time.Duration

    // 用於響應讀取的每一個鏈接緩衝區大小。
    // 其也限制了最大header大小。
    //
    // 若該值爲0,則使用默認緩衝區大小。
    ReadBufferSize int

    // 用於響應寫入的每一個鏈接緩衝區大小。
    //
    // 若該值爲0,則使用默認緩衝區大小。
    WriteBufferSize int

    // 用於(包括body體在內)完整響應讀取的最大持續時間。
    //
    // 默認響應讀取超時時間是無限的。
    ReadTimeout time.Duration

    // 用於(包括body體在內)完整請求寫入的最大持續時間。
    //
    // 默認請求寫入超時時間是無限的。
    WriteTimeout time.Duration

    // 最大響應body體大小。
    //
    // 若該值大於0且響應body體大於該限制,則客戶端返回ErrBodyTooLarge。
    //
    // 默認響應body體大小是無限的。
    MaxResponseBodySize int

    // 若此選項被設置,則Header名以現狀傳遞不進行規範化處理。
    //
    // 禁用header名規範化可能僅用於代理響應其餘客戶端指望大小寫敏感的header名。
    // 詳情請見 https://github.com/valyala/fasthttp/issues/57
    //
    // 默認請求和響應header將被規範化,
    //即單詞首字母及帶有破折號的單詞首字母被大寫,而其餘字母被小寫。
    // 例如:
    //
    //     * HOST -> Host
    //     * content-type -> Content-Type
    //     * cONTENT-lenGTH -> Content-Length
    DisableHeaderNamesNormalizing bool
    // 包含過濾掉的或未導出的內容
}
相關文章
相關標籤/搜索