16.笔记go语言——Web服务器

来源:互联网 发布:开博尔网络机顶盒刷机 编辑:程序博客网 时间:2024/06/18 14:01

16.笔记go语言——Web服务器

http包建立WEB服务器

代码如下:

package main

import (

                  "fmt"

                  "log"

                  "net/http"

                  "strings"

)

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"])

                  fork, v := range r.Form {

                                    fmt.Println("key:",k)

                                    fmt.Println("val:",strings.Join(v, ""))

                  }

                  fmt.Fprintf(w,"Hello astaxie!") //这个写入到w的是输出到客户端的

}

func main() {

                  http.HandleFunc("/",sayhelloName)       //设置访问的路由

                  err:= http.ListenAndServe(":9090", nil) //设置监听的端口

                  iferr != nil {

                                    log.Fatal("ListenAndServe:", err)

                  }

}

执行后,已经在9090端口监听http链接请求了。

浏览器输入:http://localhost:9090

服务端输出:

Map[]

path /

scheme

[]

客户端输出:

Hello astaxie!

浏览器输入:http://localhost:9090/?url_long=111&url_long=222

服务端输出:

map[url_long:[111 222]]

path /

scheme

[111 222]

key: url_long

val: 111222

要编写一个web服务器很简单,只要调用http包的两个函数就可以了。

go拥有类似python这样动态语言的特性,写web应用很方便。

如果你以前是ruby程序员,会发现和ROR的/script/server启动有点类似。

Go通过简单的几行代码就已经运行起来一个web服务了,而且这个Web服务内部有支持高并发的特性

Web工作方式

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

Response:服务器需要反馈给客户端的信息

Conn:用户的每次请求链接

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

分析 http包运行机制

如下图1

Go是如何让Web运行起来

•如何监听端口?

•如何接收客户端请求?

•如何分配handler?

我们可以看到,Go是通过一个函数ListenAndServe来处理这些事情的,这个底层其实这样处理的:初始化一个server对象,然后调用了net.Listen("tcp", addr),也就是底层用TCP协议搭建了一个服务,然后监控我们设置的端口。

HTTP源码包执行流程如下图2

 

 

 

 

 

 

原创粉丝点击