Go语言标准库 - net/http
在学习Go语言有一个很好的起点 。Go语言官方文档很详细 。今天咱们学习的Go Web服务器的搭建就需要用到Go语言官方提供的标准库 net/ 。
文章插图
服务器
package main import ( "fmt" "net/链接请求了 。
文章插图
上图中 。咱们在浏览网址软件中输入了 !
这个时侯如果咱们在浏览网址软件地址后面加一些参数试一试: 。看看浏览网址软件中输出什么?服务器端输出的又是什么?
文章插图
浏览网址软件中输出图片
文章插图
服务器端输出图片
咱们看到了上面的代码 。要编写一个Web服务器是不是很简单 。只要调用http包的两个函数就可以了 。
如果以前你是.NET程序员 。那你也许就会问 。咱们的IIS服务器不需要吗?Go就是不需要这些 。因为他直接就监听了TCP端口了 。
咱们看到Go通过简单的几行代码就已经运行起来一个Web服务了 。而且这个Web服务内部有支持高并发的特性 。现在Web服务已经搭建完成了 。那咱们现在来知道一个这个服务是怎么运行起来的呢?
Web工作方式的几个概念以下几个为服务器段的概念
Request:客户请求的信息 。用来解析客户的请求信息 。包括post、get、cookie、url等信息Response:服务器需要反馈给客户端的信息Conn:客户的每次请求链接Handler:处理请求和生成返回信息的处理逻辑分析http包运行机制
文章插图
Go实现Web服务的工作模式流程图
【web服务器搭建步骤 web服务器安装与配置教程】这个过程咱们需要清楚以下三个问题 。则就清楚Go是如何让Web运行起来了
如何监听端口?通过上面的代码咱们看到Go是通过一个函数ListenAndServe来处理这些事情的 。这个底层其实这样处
理的:初始化一个server对象 。然后调用了net.Listen("tcp", addr) 。也就是底层用TCP要求搭建了一个服
务 。然后监控咱们设置的端口 。
Go 处理过程func (srv *Server) Serve(l net.Listener) error { defer l.Close() var tempDelay time.Duration // how long to sleep on accept failure for { rw, e := l.Accept() if e != nil { if ne, ok := e.(net.Error); ok && ne.Temporary() { if tempDelay == 0 { tempDelay = 5 * time.Millisecond } else { tempDelay *= 2 } if max := 1 * time.Second; tempDelay > max { tempDelay = max } log.Printf("去服务 。相互不影响 。
如何分配handler?conn首先会解析request:c.readRequest(),然后获取相应的handler:handler := c.server.Handler 。也就是咱们刚才在调用函数ListenAndServe时候的第二个参数 。咱们前面例子传递的是nil 。也就是为空 。那么默认获取handler = DefaultServeMux,那么这个变量用来做什么的呢?对 。这个变量就是一个wifi网络路由器 。它用来匹配url跳转到其相应的handle函数 。那么这个咱们有设置过吗?有 。咱们调用的代码里面第一句不是调用了的信息反馈到客户端 。
文章插图
一个http连接处理流程
至此咱们的三个问题已经全部得到知道答 。你现在对于Go如何让Web跑起来的是否已经基本知道
知道更多技术内容 。请关注微信公众账号:安徽思恒信息科技有限公司
微信ID:AHSHXXKJ
推荐阅读
- 被驴咬了以后除了打狂犬疫苗还需要做哪些处理?
- 世界军事强国的核动力舰船,将来如果战争来临,舰艇被摧毁或者沉没,会不会污染海洋?
- 滞留美国的中国人怎么回国?
- 韩国最好看的电影推荐 最近韩国最火的电影
- 以色列真的是军事强国吗?如何定标准?
- 养殖驴的前景如何?
- 好看的电视剧推荐几部 好看的电视剧推荐几部2022
- 美国在军事是超级强国,还在研制生化武器,是不是丧心病狂?
- 怎么把掉进井里的驴活着救出来?