k8s源码分析------第三方库go-restful分析

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

我们先从go语言的http server来入手

先看net/http包中

server结构体中,有很多参数,其中handler则为入口处理函数。handler其实是一个interface

我们再看net/http包另外一个结构体

ServerMux,其实就是一个实现了Handler的类。并且其也封装了了路由添加的一些函数,方便使用者来进行路由的定制化。

说明:go-restful源码路径为github.com/emicklei/go-restful ,并且为k8s v1.1.1稳定版本中所包含的版本

下面我们进入到go-restful。首先大致说下其框架结构。

一个container其实就是httpserver的处理handler,而container里面可以add很多个webservice。

而webservice里面可以注册一些具体的处理route。

那下面我们进入源码,首先我们要进入的就是Container

这里面我们要注意的东西有

1、webservices,这个就是添加进来的ws

2、Servemux,这个便是httpserver的handler入口

3、router,其为路由选择器

下面看看add函数

从函数中,我们可以看出

1、servermux注册了一个"/"路径的处理函数 dispatch,说明container包装的入口函数就是dispatch

2、webservices将添加的ws全部保存下来

我们继续看入口

以上的都可以略过

在216行,路由选择器会选择出ws,route。

在函数最后,会执行注册在route中的function

我们看下container的初始化

可以看出来路由选择器被初始化为router jsr 311,这个是一个jsr 311标准的路由选择器

下面看下路由选择函数

下面我们看看webservice

有一个rootpath,有一个route数组,有一个pathexpr,路径正则表达式

根据rootpath生成的路径正则表达式

下面看一个简单的例子

从上面可以看出来,ws注册Route的方式

GET生成了一个routebuilder。

最后将routebuilder生成route,添加到webservice的route数组中

ok,我们现在来看看routebuilder

其实就是一些参数的设置

最后调用的Build生成了Route

我们看看route

我们看到Function,也就是上面routebuilder中的To函数注册的处理函数

但我们看定义RouteFunction,里面的参数则不是net/http库中的request和response

其实是做了一层简单的封装而已

如下

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三木的博客

Make

###一、make的功能: make是一个用来维护程序模块关系和生产可执行文件的工具,他可以根据程序修改的情况重新编译链接生成的中间代码或最终的可执行文件。执行...

17410
来自专栏柠檬先生

mybatis——学习笔记

配置文件    <properties resource="dbconfig.properties"></properties>     1. properti...

18010
来自专栏大内老A

ASP.NET的路由系统:路由映射

总的来说,我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,通过上面的介绍我们知道这是一个类型的RouteCollection...

1889
来自专栏Grace development

uploadify头像上传302错误[新手容易理解的方法]

出现302错误,基本上就是你使用了官方自动加载方法_initialize造成的,因flash不能传递session值,你_initialize方法判断sessi...

382
来自专栏Hongten

JSP 三讲

381
来自专栏mySoul

原生js上传文件 发送JSON,XML,对请求的表单进行URL编码详解

HTML表单,当用户提交表单时,表单中的数据将会编码到字符串中,一并伴随着请求发送。

574
来自专栏爱撒谎的男孩

struts核心配置文件详解(action配置)

-如果用户输入的的URL地址在这个<package>下,即是namespace符合,但是在其中没有相应的action的做出响应,可能是地址输错了,此时的我们需要...

3365
来自专栏李家的小酒馆

Linux基本命令

Linux 基本命令 下面为基本可以使用到的命令,只添加了一些常用的参数。 1.cd:切换目录 cd /root 2.mkdir:创建文件 mkdir /roo...

1850
来自专栏python3

tkinter -- tkCommonDialog

各个 参数的意义都 一样,只是 ok 的返回值为保存的文件名称;如果取消则为 None

721
来自专栏程序员的碎碎念

ThinkPHP基础知识(二)

今天闲来无事,继续来看我们的tp下一个教程(勉强叫做这个吧)。看前面的博客文章我们知道: ? 那么,我们怎么创建控制器和方法呢? 一、创建控制器和方法 创建控制...

3446

扫描关注云+社区