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 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

【译】JavaScript的工作原理:引擎,运行时和调用堆栈的概述

随着javascript变得越来越流行,很多团队的技术栈都开始使用它,比如前端、后端、hybrid、嵌入式设备等。

753
来自专栏代码世界

Python之线程

操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种...

4358
来自专栏学习有记

学委助手

学委除了要收作业,最烦的就是统计谁没有交作业啦,还有就是大家的命名不统一造成文件排序混乱,更加大了学委统计的难度。所以,写这个应用的目的就是查交和格式化文件命名...

1482
来自专栏JAVA高级架构

一些设计上的基本常识

最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助, 把暂时想到的几条,先记在这里。 1. API与SPI分离 框架或组件通常有两类客户...

651
来自专栏游戏杂谈

svn导出文件进行比较

之前有介绍svn log 的命令,即可导出版本A~B之间所有的修改动作,然后复制出相应的文件(中间有一个算法去处理每一个动作,然后得到最终需要导出的文件列表,...

863
来自专栏数据之美

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应...

6747
来自专栏阿杜的世界

【转】Dubbo架构设计详解总体架构核心要点参考资料

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度...

965
来自专栏技术小讲堂

iBatis.Net(2):基本概念与配置

写完第一篇,有朋友给我发邮件,说想让我配合实例写会不会更好一些,可是呢,我觉得这就相当于那些北大的什么鸟给无辜的孩子们吃快餐一样,我是坚决反对那样的,知其然不知...

2737
来自专栏前端小作坊

GA源代码里的小技巧之cookie篇

cookie的本质是存储在浏览器端的一段简单数据(多个键值对),浏览器会从服务器接受或者发送给服务器cookie。这样便可以为没有状态的HTTP协议提供了记录状...

1364
来自专栏听雨堂

【7】AccessDB快速数据访问

阅读目录 C#和VB数据访问的比较 AccessDB的设计 数据库的连接 三种主要操作 错误输出及调试 小结 C#和VB数据访问的比较 C#中要进行...

18410

扫码关注云+社区