栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Go 搭建一个Web服务器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go 搭建一个Web服务器

文章目录
  • Go 搭建一个Web服务器
    • 问题引出
    • 搭建 Web 服务器

Go 搭建一个Web服务器
问题引出

2021 年 11 月 7 日凌晨,伴随着 “EDG 牛逼!!” 响彻天际,在距离我们 7777 km 冰岛的天空,乌云和月光默默的组成了一个数字:7。EDG 终于打破魔咒,历经 7 年,获得了 S 系列含金量最高的总冠军…,bgm 响起,“赛文~赛文~哈!”

那么问题来了,EDG 牛逼 和 这个神秘的数字 7 又有什么关系和渊源…,我默默的打开了我的浏览器,输入了 7 和 EDG 这个数字…,按下 ENTER,一切都变了…

好了,回到正题,故事如何请听下回分解。

那么,在我们的日常生活中,打开浏览器网上冲浪的时候,例如输入 EDG 和 7,按下 ENTER 键,一个个网页会出现在我们面前,我们会获得我们所需要的信息。在这个看似简单的用户行为背后,到底隐藏了什么呢?

对于计算机而言,浏览器实则是一个 客户端,当你输入 URL 时,首先浏览器会去请求 DNS 服务器,DNS 会根据 URL,获取相应的域名对应的 IP 地址(也就是服务器地址),然后通过 IP 地址去找到相应的服务器,要求建立 TCP 连接,等待二者完成 三次握手,建立连接,然后就会进行 信息传输,浏览器会把 HTTP Request (请求包)发送给服务器,服务器接受请求包,然后调用自身的服务,处理,返回 HTTP Response (响应包)。客户端收到来自服务器的响应后开始渲染 Response 包中的 主体(body),等待传输完成后断开与服务器之间的 TCP 连接(四次挥手)

图 1.1 用户访问一个 Web 站点的过程

Web 服务器的工作原理可以简单的归纳为:

  • 客户端通过 TCP/IP 协议建立到服务器的 TCP 连接
  • 客户端向服务器发送 HTTP 协议请求包
  • 服务器接收 HTTP 请求包,处理请求,组织发送 HTTP 协议应答包,若请求的资源中含有动态语言的内容,则会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
  • 客户机与服务器断开。由客户端解释 HTML 文档,在客户端屏幕上渲染图形结果

So,这个过程中最关键的部分便是 Web 服务器了,let’s make it ! Go

我们接下来会使用到 Go 语言中的 net/http 包搭建一个小型的 Web 服务器,让我们拭目以待。


搭建 Web 服务器

首先,说明一个这个服务器的效果,当我们搭建完这个服务器后,在浏览器输入 localhost:9000,会返回一个页面,写着:EDG 牛逼! 的字样

话不多说,上代码:

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

func sayHelloName(w http.ResponseWriter, r *http.Request) {
	r.ParseForm() // 解析参数,默认是不会解析的
	fmt.Println(r.Form) // 打印相关
	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, "EDG 牛逼!") // 写入返回体
}


func main()  {
	http.HandleFunc("/",sayHelloName) // 设置访问的路由
	err := http.ListenAndServe(":9000", nil) // 设置监听的端口
	if err != nil {
		log.Fatalf("ListenAndServe: ", err)
	}
}

大家如果有兴趣的可以看一下 net/http 包示例:net/http

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号