0
点赞
收藏
分享

微信扫一扫

Web基础介绍


学习目标

了解Web的工作方式
Go 搭建一个Web服务(net/http包,代码方式搭建Go Web服务)
Go Web工作原理

Web的工作方式

浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。

Web基础介绍_Go


用户访问一个Web站点的过程 一个Web服务器也被称为HTTP服务器(例如: Java Web开发同学,Apache/Nginx 搭建一个完整Web服务器。),它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(其实手机端客户端内部也是浏览器实现的)。

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

客户机通过TCP/IP协议建立到服务器的TCP连接

客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档

服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端

客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果

Go 搭建一个Web服务器(重点)

Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。 (通过编写一个代码来进行演示,通过代码实战才能更好的理解原理)

Web基础介绍_Web_02


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

如果你以前是PHP程序员(Java程序员),那你也许就会问,我们的nginx、apache服务器不需要吗?Go就是不需要这些,因为他直接就监听tcp端口了,做了nginx做的事情,然后sayHelloName这个其实就是我们写的逻辑函数了,跟php/Java里面的控制层(controller)函数类似。

如果你以前是Python程序员,那么你一定听说过tornado/flask,这个代码和他是不是很像,对,没错,Go就是拥有类似Python这样动态语言的特性,写Web应用很方便。
如果你以前是Ruby程序员,会发现和ROR的/script/server启动有点类似。
我们看到Go通过简单的几行代码就已经运行起来一个Web服务了,而且这个Web服务内部有支持高并发的特性。
PHP/Java-> Go ( 本课程重点讲解Go Web,后续我们会通过gin框架来实现一个完整项目)
Python (数据数据分析/机器学习/深度学习), 这部分如果工程师追求性能处理的话,Go转行

Go Web核心概念和工作机制

如何通过Go搭建一个Web服务,我们可以看到简单应用一个net/http包就方便的搭建起来了。那么Go在底层到底是怎么做的呢?

web工作方式的几个概念

以下均是服务器端的几个概念
Request:用户请求的信息,用来解析用户的请求信息,包括post、get、cookie、url等信息
Response:服务器需要反馈给客户端的信息
Conn:用户的每次请求链接
Handler:处理请求和生成返回信息的处理逻辑

分析http包运行机制

如下图所示,是Go实现Web服务的工作模式的流程图

Web基础介绍_服务器_03


http包执行流程

http包执行流程创建Listen Socket, 监听指定的端口, 等待客户端请求到来。

Listen Socket接受客户端的请求, 得到Client Socket, 接下来通过Client Socket与客户端通信。

处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST方法, 还可能要读取客户端提交的数据, 然后交给相应的handler处理请求, handler处理完毕准备好客户端需要的数据, 通过Client Socket写给客户端。

这整个的过程里面我们只要了解清楚下面三个问题,也就知道Go是如何让Web运行起来了

如何监听端口?

如何接收客户端请求?(request 可以获取请求数据,response 返回消息对客户端)

如何分配handler?

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

Web基础介绍_前端_04


Web基础介绍_网络_05

总结

重点通过net/http 包来web服务的开发,更加底层。
优点:可以更加了解Go Web底层工作原理,那么思考:是否有go相关的框架做这件事情呢,使得操作更加方便(一般框架都是帮助做很多封装,不需要需要关注更多的细节,把精力放到业务上)

下一章节,我们来整体研究一些Go常见的框架以及gin框架重点介绍。


举报

相关推荐

0 条评论