跟我一起学习GO语言011——Go语言搭建一个Web服务器

     上一节我们介绍了搭建一个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包的运行机制:

1. 创建Listen Socket,监听指定的端口,等待客户端请求到来。
2. Listen Socket接收客户端的请求,得到Client Socket,接下来通过Client Socket与客户端通信。
3. 处理客户端请求,首先从Client Socket 读取HTTP请求的协议头,如果是POST方法,还可能要读取客户端提交的数据,然后交给相应的handler处理请求,handler处理完毕准备好客户端需要的数据,通过Client Socket写给客户端。

      整个过程中,我们需要了解清楚三个问题,如何监听端口、如何接收客户端请求、如何分配handler,这样也就知道Go语言是如何让Web运行起来的。

      以上只是简单的包执行流程,如果你要了解http连接处理流程,你看看下图:然后可以深入了解里面的运行机制。

      请开始你的表演,践行,践行,再践行。未完待续。。。

你可能感兴趣的:(跟我一起学习GO语言011——Go语言搭建一个Web服务器)