博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】k8s源码分析------第三方库go-restful分析
阅读量:4032 次
发布时间:2019-05-24

本文共 1298 字,大约阅读时间需要 4 分钟。

 

由本人空间转过来,空间地址为

 

我们先从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

 

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

如下

龚浩华

qq 月牙寂 道长 29185807

2016年3月18日

 (版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

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

 

你可能感兴趣的文章
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
ArrayList集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>