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

notbaron · · 1087 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

         for k,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) //设置监听的端口

         if err!= 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

 

 

 

 

 

 


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:notbaron

查看原文:16.蛤蟆笔记go语言——Web服务器

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1087 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传