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

相关文章

来自专栏腾讯NEXT学位

JavaScript Worker 另类玩法

1153
来自专栏数据之美

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

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

9417
来自专栏喔家ArchiSelf

消息队列在RTOS的应用

传说互联网应用有两大利器,一个是缓存,另一个就是消息队列。 一直相对消息队列做一下梳理,希望早日另有成文。 一叶知秋,实际上消息队列在嵌入式系统中同样有着广泛的...

1053
来自专栏学习有记

学委助手

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

1892
来自专栏阿杜的世界

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

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

1135
来自专栏linux、Python学习

黑客们会用到哪些Python技术?

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工具)。Python允许开发...

1614
来自专栏跟着阿笨一起玩NET

Microsoft SyncToy 文件同步工具

SyncToy 是由 微软 推出的一款免费的文件夹同步工具。虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了。实际上,我感觉这款软件还真是摆脱了...

1122
来自专栏玄魂工作室

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

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

923
来自专栏木子昭的博客

精析Python3实现动态web服务(附服务端源码)如果我们提供一个动态网站服务,至少应考虑以下四点:一个优秀的动态web框架应该是这样的:关于WSGI标准WIGS模型的要点:实现源码小结:

实现一个简单的静态web网站,只需将写好的html页面上传到特定的web服务器软件即可,但静态网页其实和图片没什么区别,每次更新网站内容,都需要重新制作htm...

37312
来自专栏周明礼的专栏

一步一步带你搭建一个“摩登”的前端开发环境

最近几年也陆续推出了多种不同的js类型系统用于增强js的健壮性,其中像 typescript 就是其中的佼佼者。当然我今天要讲的并不是typescript,而是...

1.5K0

扫码关注云+社区