前言
都說go標準庫實用,api設計簡潔。這次就用go 標準庫中的net/http包實現乙個簡潔的http web伺服器,包括三種版本。
v1最簡單版
直接使用http.handlefunc(partern,function(http.responsewriter,*http.requwww.cppcns.comest){})
handlefunc接受兩個引數,第乙個為路由位址,第二個為處理方法。
log.fatal(http.listenandserve(":1210", nil程式設計客棧))
v2自定義handler
檢視標準庫原始碼,v1版本實際上是呼叫了handle方法,傳入的handlerfunc實現了handler的servehttp方法,實際上是servehttp在做http請求處理。
handlefunc呼叫.png
handlefunc實現handler.png
handler介面定義.png
由此我們可以自定義自己的han程式設計客棧dler,v2版本**如下:
log.fatal(http.listenandserve(":1210", mux程式設計客棧))
v3自定義server配置
前面對handler開了一次刀,下面我們看看http.listenandserve()中有些什麼秘密。
listenandserve.png
原來這裡可以自定義http伺服器配置,都在server這個結構體中,這個物件能配置監聽位址埠,配置讀寫超時時間,配置handler,配置請求頭最大位元組數...,所有稍微改造一下v2的程式得到v3版:
拓展一下(如何平滑關閉http服務)
在go1.8中新增了乙個新特性,利用shutdown(ctx context.context) 優雅地關閉http服務。
文件中描述:
shutdown 將無中斷的關閉正在活躍的連線,然後平滑的停止服務。處理流程如下:
tzxoiry
利用這個特性改造一下v3版本的程式,實現乙個關閉http的提示
// 主動關閉伺服器
// 接收退出訊號
嘗試訪問 http://localhost:1210/bye 在控制台會得到以下提示結果,平滑關閉http服務成功:
成功平滑關閉.png
http包傳送模組詳解 golang
完成http的傳送和對http伺服器響應資料的處理 1 request,response結構體,封裝http內容以及解析http協議 2 roundtripper介面,能夠執行http傳送,並能返回給定請求的response。該功能可由開發者實現 3 transport結構體,http庫內部實現的r...
rclone mount 掛載http檔案伺服器
rclone mount 掛載http檔案伺服器需求 幾台服務需要同步主伺服器某個目錄的檔案 之前採用的方案是rsync同步,用定時任務每五分鐘同步一次,每次都得清空再同步,有點扯犢子了哈 期望 通過掛載的方式來實現檔案同步 環境 源伺服器linux系統,目標伺服器windows系統 方案其實有很多...
Http協議詳解 Http請求詳解
http是hypertext transfer protocol 超文字傳輸協議 的簡寫,它是tcp ip協議的乙個應用層協議,用於定義web瀏覽器與web伺服器之間交換資料的過程。客戶端連上web伺服器後,若想獲得web伺服器中的某個web資源,需遵守一定的通訊格式,http協議用於定義客戶端與w...