上一节我们介绍了搭建一个Web服务器需要了解的基础知识,本节我们来看看怎么用Go语言搭建一个Web服务器,Go语言中提供了一个完善的net/http包,通过http包可以很方便地搭建一个可以运行的Web服务。
我们还是以代码方式展示:
package main
import(
“fmt”
“net/http”
“strings”
“log”
)
func sayhelloName(w http.ResponseWriter,r *http.Request){
r.ParseForm()//解析参数,默认时不会解析的
fmt.Println(r.Form)//这些信息时输出到服务器端打印信息
fmt.Println(“path”,r.URL.Path)
fmt.Println(“scheme”,r.URL.Scheme)
fmt.Println(r.Form[“url_long”])
for k,v:=range r.Form{
fmt.Println(“key:”,k)
fmt.Println(“val:”,string.Join(v,””))
}
fmt.Fprintf(w,”Hello astaxie!”)//这个写入到w的时输出到客户端的
}
func main(){
http.HandleFunc(“/”,sayhelloName)//设置访问的路由
err:=http.ListenAndServer(“:9090”,nil)//设置监听的端口
if err!=nil{
log.Fatal(“ListtenAndServer:”,err)
}
}
我们build之后,然后执行web.exe,这个时候其实已经在9090端口监听tcp链接请求了。在浏览器输入http://localhost:9090,浏览器页面输出:Hello astaxie!.通过上面代码展示及输出,我们可以知道,要编写一个Web服务器很简单,只要调用http包的两个函数就可以了。
下面我们来Go语言如何使Web工作的呢?
Web工作方式的几个概念:
Request:用户请求的信息,用来解析用户的请求信息,包括post、get、Cookie、url。
Response:服务器需要反馈给客户端的信息。
Conn:用户的每次请求链接。
Handler:处理请求和生成返回信息的处理逻辑。
分析http包的运行机制:
创建Listen Socket,监听指定的端口,等待客户端请求到来。
2. Listen Socket接收客户端的请求,得到Client Socket,接下来通过Client Socket与客户端通信。
3. 处理客户端请求,首先从Client Socket 读取HTTP请求的协议头,如果是POST方法,还可能要读取客户端提交的数据,然后交给相应的handler处理请求,handler处理完毕准备好客户端需要的数据,通过Client Socket写给客户端。
整个过程中,我们需要了解清楚三个问题,如何监听端口、如何接收客户端请求、如何分配handler,这样也就知道Go语言是如何让Web运行起来的。
以上只是简单的包执行流程,如果你要了解http连接处理流程,你看看下图:然后可以深入了解里面的运行机制。
请开始你的表演,践行,践行,再践行。未完待续。。。