Luci的工作流程

2021-08-19 23:35:34 字數 3592 閱讀 8340

1、瀏覽器敲入192.168.1.1後就,路由器作為uhttp server會把/www/index.html這個頁面返回給瀏覽器,而且這個頁面又會重新整理, 去請求頁面/luci/cgi,**如紅色標記:

luci - lua configuration inte***ce

2.然後uhttp server就會去呼叫/www/cgi-bin/luci這上指令碼,這個指令碼的**如下:

#!/usr/bin/lua

require"luci.cacheloader"

require"luci.sgi.cgi"

luci.dispatcher.indexcache= "/tmp/luci-indexcache"

luci.sgi.cgi.run()//最後一行開始解析http的請求。

我們可以到找到檔案 usr/lib/lua/luci/sgi/cgi.lua,並找到run方法,這run 方法的主要任務就是在安全的環境中開啟開始頁面(登入頁面 ) ,在 run 中,最主要的

功能還是在 dispatch.lua 中完成。

run方法**如下:

執行 luci 之後,就會出現登入介面:

-bash-4.0# pwd

/var/www/cgi-bin

-bash-4.0# ./luci

status: 200 ok

content-type: text/html; charset=utf-8

cache-control: no-cache

expires: 0

/*some html code*/

如果你成功的執行了 luci 就說明你的 luci 框架成功的跑了起來

luci.http.request這個方法用來初始化乙個http請求,並返回給變數r.接下來利用函式coroutine.create()建立乙個協程序x,協程序的處理函式是luci.dispatcher,httpdispatch,接下來再使用函式coroutine.resume(x, r)啟用協程序,並往協程序傳值r,r就是我們的http請求。

現在我們開啟luci/dispatcher.lua這個檔案,並找到httpdispatch這個函式,**如下:

endhttpdispatch第乙個引數就是coroutine.resume(x,r)傳過來的請求r, prefix為空。httpdispatch的主要功能是從環境變數path_info獲取請求路徑,像字串」並把這個字串解析成單個字元存放在table r{}中,最後再呼叫dispatch()這個函式,解析完後,關閉http連線。dispatch這個函式是整個luci中的核心。由於dispatch函式的**太多,就不全部貼出來,只貼出一些關鍵步驟。

其中包含控制項的新增和業務的處理, 其中alias cgi form call  template等定義了此選單相應的處理方式,form 和 cgi 對應到 model/cbi 相應的目

錄下面,那裡面是對應的定製好的 html 和 lua 業務處理。

主要目錄的跳轉如下:

1、/www/index.html

2、/luci/cgi

3、/www/cgi-bin/luci   //注意此時的瀏覽器中的位址字尾與此相似

4、usr/lib/lua/luci/sgi/cgi.lua  //run的方法,登陸介面由此產生

5、luci/dispatcher.lua中的  httpdispatch函式,協程序的處理函式是luci.dispatcher.httpdispatch

httpdispatch的主要功能是從環境變數path_info獲取請求路徑,像字串」並把這個字串解析成單個字元存放在table r{}中,最後再呼叫dispatch()這個函式,解析完後,關閉http連線。dispatch這個函式是整個luci中的核心。

然後介紹一下luci的mvc架構:

/usr/lib/lua/luci/

,在底下主要有以下這些目錄:model,controller,view解釋如下:

luci是基於mvc的思想,基中m是model,是原來訪問資料的地方, v就是view,原來向使用者展示的頁面, c就是controller, controller會從model中訪問資料,並傳給view,向使用者展示配置結果。

在 luci 的官方**說明了 luci 是乙個 mvc 架構的框架,這個 mvc 做的可擴充套件性很好,可以完全的統一的寫自己的 html 網頁,而且他對 shell 的支援相當的到位, (因為 luci

是 lua 寫的, lua 是 c 的兒子嘛, 與 shell 是兄弟) 。 在登入介面使用者名稱的選擇很重要,luci 是乙個單使用者框架,公用的模組放置在 */luci/controller/下面,各個使用者的模組放置在*/luci/controller/下面對應的資料夾裡面, 比如 admin 登入, 最終的頁面只顯示/luci/controller/admin 下面的選單。這樣既有效的管理了不同管理員的許可權。

DHCP的工作流程

1.dhcp 協議簡介 dhcp 全稱是 dynamic host configuration protocol 中文名為動態主機配置協議,它的前身是 bootp 它工作在 osi的應用層,是一種幫助計算機從指定的 dhcp 伺服器獲取它們的配置資訊的自舉協議。dhcp 使用客戶端 伺服器模式,請求...

Struts的工作流程

當actionservlet接受到乙個客戶請求時,將執行如下流程。流程 2 如果actionform例項不存在,就建立乙個actionform物件,把客戶提交的表單資料儲存到actionform物件中。3 根據配置資訊決定是否需要表單驗證。如果需要驗證,就呼叫actionform的validate ...

struts的工作流程!

已經開始接觸到框架了,今天是學習struts的第一天,感覺有點小暈!和周圍同學了解到以後工作可能會用的很少,哎!既然學了就好好搞懂吧!struts是一種組建,是實現web中一些 和結構的軟體。現在學的是struts1.2版本,struts是基於mvc的,有乙個actionservlet,客戶端的所以...