詳解Golang開啟http服務的三種方式

2022-09-24 11:03:09 字數 2085 閱讀 8706

前言

都說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...