[Go菜牛系列]net/http包知識點

關於 net/http 包的幾點總結:

  • net/http本身基於goroutine實現, 通過新建協程處理新的連接任務;
  • 默認是長連接: net/http客戶端發起請求時header標記HTTP/1.1;
  • 連接可複用:默認創建連接池;
  • 關於連接池使用:池中找不到空閒連接時,會重新new一個連接,而不會阻塞等待一個連接;
  • 關於連接斷開:如果對端關閉連接,由於Go Runtime會在底層進行epoll wait,監聽close事件並關閉相關fd資源,上層應用可以被告知哪些連接已關閉,從而進行相關的邏輯處理;
  • 關於time_waitclose_wait:收到對方的fin請求, 內核會將連接置爲close_wait狀態;主動發起關閉連接請求的一方,會將連接置爲time_wait狀態;

以下爲net/http的極簡demo:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func HelloHandler(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "Hello, world!\n")
}

func main() {
    http.HandleFunc("/hello", HelloHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

其中開啓服務監聽的流程如下圖所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章