fastHttp服務端處理請求的過程

2022-07-07 01:00:15 字數 2062 閱讀 2466

github 位址

fasthttp 服務端的處理請求的過程

工作過程

主要**

設定監聽位址 server.go

func (s *server) listenandserve(addr string) error 

if tcpln, ok := ln.(*net.tcplistener); ok )

} return s.serve(ln)

}

初始化協程池並啟動,當接收到請求後,調 wp.serve 交給協程池去處理請求 server.go

func (s *server) serve(ln net.listener) error 

wp.start()

for

s.setstate(c, statenew)

atomic.addint32(&s.open, 1)

if !wp.serve(c)

} ......

}

獲取請求的控制代碼 server.go

func acceptconn(s *server, ln net.listener, lastperiperrortime *time.time) (net.conn, error) 

}

協程池處理請求 workerpool.go

// 從協程池中獲取某個協程對應的 控制代碼channel,然後將 3 中獲取到的 請求控制代碼推入channel

func (wp *workerpool) serve(c net.conn) bool

ch.ch

return true

}// 這個是協程池工作最重要的部分,獲取協程池中協程對應的channel

func (wp *workerpool) getch() *workerchan

} else

wp.lock.unlock()

if ch == nil

// 新建協程控制代碼,且為之建立協程

vch := wp.workerchanpool.get()

ch = vch.(*workerchan)

go func() ()

} return ch

}func (wp *workerpool) workerfunc(ch *workerchan)

// wp.workerfunc是在初始化協程池的時候註冊的方法,是 s.serveconn

if err = wp.workerfunc(c); err != nil && err != errhijacked

} ......

if !wp.release(ch)

} .....

// 協程的控制代碼channel 出現nil的時候 當前協程就退出了,退出後將work協程數自減

wp.workerscount--

......

}// 請求處理完之後 將當前協程的控制代碼channel 放入協程池的ready切片中,待下次獲取協程的控制代碼channel的時候進行復用(復用這個控制代碼channel就相當於復用了對應的協程)

func (wp *workerpool) release(ch *workerchan) bool

wp.lock.unlock()

return true

}

實際處理請求的方法 server.go

func (s *server) serveconn(c net.conn) (err error) 

.....

// 處理http響應

}

高效的原因

fasthttp 協程池 詳情見 2.2.2 、2.2.4

fasthttp 物件復用

協程channle物件 復用 詳見2.2.4 的 getch() 函式

上下文物件復用 詳見2.2.5

SSRF(服務端請求偽造)

ssrf server side request forgery 伺服器端請求偽造 是一種由攻擊者構造形成由服務端發起請求的乙個安全漏洞。一般情況下,ssrf攻擊的目標是從外網無法訪問的內部系統。正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統 作為web安全萌新,以上晦澀...

SSRF 服務端請求偽造

ssrf,server side request forgery,服務端請求偽造,是一種由攻擊者構造形成由伺服器端發起請求的乙個漏洞。一般情況下,ssrf 攻擊的目標是從外網無法訪問的內部系統。漏洞形成的原因大多是因為服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標位址作過濾和限制。也就是當前...

SSRF 服務端請求偽造

ssrf,server side request forgery,服務端請求偽造,是一種由攻擊者構造形成由伺服器端發起請求的乙個漏洞。一般情況下,ssrf 攻擊的目標是從外網無法訪問的內部系統。漏洞形成的原因大多是因為服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標位址作過濾和限制。攻擊者可以...