作家
登录

Go语言HTTP Server源码分析

作者: 来源: 2017-04-10 15:04:23 阅读 我要评论

func (mux *ServeMux) ServeHTTP (w ResponseWriter, r *Request) {    if r.RequestURI == "*" {        if r.ProtoAtLeast(1, 1) {            w.Header().Set("Connection", "close")        }        w.WriteHeader(StatusBadRequest)        return    }    //匹配注册到路由上的handler函数    h, _ := mux.Handler(r)    //调用handler函数的ServeHTTP办法    //即Hello函数,然后把数据写到http.ResponseWriter    //对象中返回给客户端。    h.ServeHTTP(w, r)}func (mux *ServeMux) Handler(r *Request) (h Handler, pattern string) {    if r.Method != "CONNECT" {        if p := cleanPath(r.URL.Path); p != r.URL.Path {            _, pattern = mux.handler(r.Host, p)            url := *r.URL            url.Path = p            return RedirectHandler(url.String(), StatusMovedPermanently), pattern        }    }    return mux.handler(r.Host, r.URL.Path)}func (mux *ServeMux) handler(host, path string) (h Handler, pattern string) {    mux.mu.RLock()    defer mux.mu.RUnlock()    // Host-specific pattern takes precedence over generic>if mux.hosts {        //如 127.0.0.1/hello        h, pattern = mux.match(host + path)    }    if h == nil {        // 如  /hello        h, pattern = mux.match(path)    }    if h == nil {        h, pattern = NotFoundHandler(), ""    }    return}func (mux *ServeMux) match(path string) (h Handler, pattern string) {    var n = 0    for k, v := range mux.m {        if !pathMatch(k, path) {            continue        }      //经由过程迭代m寻找出注册路由的patten模式      //与实际url匹配的handler函数并返回。        if h == nil || len(k) > n {            n = len(k)            h = v.h            pattern = v.pattern        }    }    return}func pathMatch(pattern, path string) bool {    if len(pattern) == 0 {        // should not happen	
			
 1/6    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  Linux命令行工具使用小贴士及技巧(三)

在这个系列的第一部分,我们具体地评论辩论了 cd - 敕令,在第二部分,我们深刻商量了 pushd 和 popd 两个敕令,以及它们应用的场景。持续对敕令行的评论辩论,在这篇教程中,我们将会经由>>>详细阅读


本文标题:Go语言HTTP Server源码分析

地址:http://www.17bianji.com/lsqh/34685.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)