k8s源碼分析------第三方庫go-restful分析

來源:互聯網
上載者:User

由本人空間轉過來,空間地址為http://user.qzone.qq.com/29185807/blog/1458275362


我們先從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,路徑Regex




根據rootpath產生的路徑Regex

 

下面看一個簡單的例子



 

從上面可以看出來,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日

 (著作權聲明:本文為作者原創,如需轉載請通知本人,並標明出處和作者。擅自轉載的,保留追究其侵權的權利。)


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.