go web的服务对象

Request:用户请求的信息,用来解析用户的请求信息,包括post,get,Cookie,url等信息

Response:服务器需要返回给客户端的信息

Conn:用户的每次请求链接

Handler;处理请求和生成返回信息的处理逻辑

HTTP包详说

Go语言的http有两个核心功能:Conn和ServeMux

Conn:

利用goroutines处理Conn的读写操作,使每个请求都保持独立,相互不阻塞,用以提供高效的网络响应事件

go语言在等待客户顿请求时写下如下代码

c,err:=srv.newConn(rw)
if err!=nil {
    continue
}
go c.serve()

ServeMux:

Conn.serve()时内部调用了http默认的路由器,通过默认的路由器将请求的信息交给后台端的处理函数,

ServeMux:的结构体

type ServeMux struct {
    mu    sync.RWMutex          //锁,由于请求涉及到并发处理,因此这里需要一个锁机制
    m     map[string]muxEntry   //路由规则,一个string对应一个mux实体,这里的string就是注册的路由表达式
    hosts bool // whether any patterns contain hostnames
}

muxEntry:的结构体

type muxEntry struct {
    explicit bool       //是否精确匹配
    h        Handler    //这个路由表达式对应哪个handler
    pattern  string
}

Handler:的结构体

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)//路由实现器
}

注:handler是个接口并在其中实现了ServeHTTP(ResponseWriter, *Request)这个接口

总结:

由上得知Go语言支持外部实现路由器ListenAndServer的第二个参数就是用来设置外部路由器的,为一个handler接口。即,外部路由器实现了Handler接口就可以

服务器对象详细

ListenAndServe: 端口监听

http.ListenAndServe(":8090",nil)//端口号和Handler

底层使用Socket原理:

ln, err := net.Listen("tcp", addr)

Conn:用户的每次请求链接

go c.serve(ctx)         //为新连接服务。

Request:用户请求的信息,用来解析用户的请求信息,包括post,get,Cookie,url等信息

r.Form              //请求的参数列表返回一个map(数据类型为)
r.FormValue("name") //获取某个请求的参数值(若为array则取第一个值,若为一个值则返回一个值)
r.URL.Path          //请求服务器项目的路径(没有ip和端口)
r.URL.Scheme        

http.ResponseWriter:给客户端返回的信息

w.Write(aa)             //将字符数组aa返回给客户端
t,_:=template.ParseFiles("login.html")//ParseFiles创建了一个新的Template,并从以下位置解析了模板定义//指定的文件。返回的模板的名称将具有(基)名称和//(已分析的)第一个文件的内容。必须至少有一个文件。
t.Execute(w,p)          //执行将解析模板应用到指定的数据对象,写输出到客户端。p为携带给模板的参数

cookie

r.Cookie("")//从cookie中获取值
r.Cookies()//获取cookie参数中的所有参数
cookie:=http.Cookie{}//自定义cookie
http.SetCookie(w,&cookie)//将cookie返回给客户端

session

你可能感兴趣的:(go web的服务对象)