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(数据类型为<string,[]string>)
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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,826评论 19 139
  • 本文为转载,原文:Golang Web学习(13)—— 搭建简单的Web服务器 1、Web工作方式 我们平时浏览网...
    ChainZhang阅读 14,545评论 1 12
  • 作者 肖佩云 我把思念放入小溪 希望流水能把它带到远方 那里有我心爱的人 夜夜在等待着爱的消息 我把渴望撒在风中 ...
    肖佩云阅读 717评论 0 2
  • 心情莫名的差 自己也不知道为什么 生活看似规律却繁杂的让自己崩溃 心情看似明媚却不知道为什么总是无端的想要掉眼泪 ...
    穆悦阅读 313评论 0 0
  • 皮皮,姥爷从侧面了解到了你这次期中考试成绩,不是太理想,或者干脆说,就是不理想,考试成绩大大的超出了我们的...
    盼之阅读 293评论 0 0

友情链接更多精彩内容