③处理请求,返回结不雅
serverHandler 重要初始化路由多路复竽暌姑器。如不雅server对象没有指定Handler,则应用默认的DefaultServeMux作为路由多路复竽暌姑器。并调用初始化Handler的ServeHTTP办法。
type serverHandler struct { srv *Server}func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) { handler := sh.srv.Handler if handler == nil { handler = DefaultServeMux } if req.RequestURI == "*" && req.Method == "OPTIONS" { handler = globalOptionsHandler{} } handler.ServeHTTP(rw, req)}将数据写给客户端
//重要代码,经由过程层层封装才走到这一步func (w checkConnErrorWriter) Write(p []byte) (n int, err error) { n, err = w.c.rwc.Write(p) if err != nil && w.c.werr == nil { w.c.werr = err w.c.cancelCtx() } return}serverHandler{c.server}.ServeHTTP(w, w.req)当请求停止后,就开端履行连接断开的相干逻辑。
总结
Go说话经由过程一个ServeMux实现了的路由多路复竽暌姑器来治理路由。同时供给一个Handler接口供给ServeHTTP办法,实现handler接口的函数,可以处理实际request并返回response。
package mainimport ( "fmt" "net/http")//③处理请求,返回结不雅func Hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello world")}func main() { //①路由注册 http.HandleFunc("/", Hello) //②办事监听 http.ListenAndServe(":8080", nil)}
ServeMux和handler函数的连接桥梁就是Handler接口。ServeMux的ServeHTTP办法实现了寻找注册路由的handler的函数,并调用该handler的ServeHTTP办法。
所以说Handler接口是一个重要枢纽。
简单梳理下全部请求响应过程,如下图
【义务编辑:seeker TEL:(010)68476606】推荐阅读
在这个系列的第一部分,我们具体地评论辩论了 cd - 敕令,在第二部分,我们深刻商量了 pushd 和 popd 两个敕令,以及它们应用的场景。持续对敕令行的评论辩论,在这篇教程中,我们将会经由>>>详细阅读
本文标题:Go语言HTTP Server源码分析
地址:http://www.17bianji.com/lsqh/34685.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示