作家
登录

Go语言HTTP Server源码分析

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

} } c.rwc.SetReadDeadline(time.Time{}) }}

③处理请求,返回结不雅

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】

  推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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