延續昨天的圖,今天我們再焠取主要的軟體元件,精簡成一張三層的立體圖,看看他們如何運作,提供家庭雲的雲端服務。明天,開始會帶領大家動手做囉。
所有文章
http://ithelp.ithome.com.tw/category/家庭雲
首先,對下圖中的名稱,簡要說明。
1)WEB SERVER APK : 採用OPEN SOURCE 的 APP - iJetty,它也是一個Java Servlet Container(tiny Java Based web server),更是我們家庭雲的關鍵元件。
2)WAR : 我們以Servlet撰寫的WEB Application,它的內部會調用其他APP的 公開服務函式。
3)APK : Android的可執行檔副檔名為APK,APP開發者運用Android的JAVA API,撰寫的各式應用程式,也就是俗稱的 APP,有時APK會包含 JNI與SO,在此主要表示應用程式。
4)JNI : 可由 Java 層的開發團隊或SO 層的C/C++程式開發團隊設計,主要用來銜接Java層的AP與C/C++層的SO軟件,這裡是軟硬體智慧的交會處。
5)SO : 硬體元件商提供的 SharedLibrary,此部份會經HAL連接驅動程式,所以須由硬體元件商以C或C++撰寫。
請注意,我以三種深淺不同的綠,分別表示最上層的Java層程式、中間的JNI 程式,以及 So所在的底層,以呈現一個APP是由這三層的軟件所構成,非僅有Java層,這也讓我們整合軟硬體的機會。 淺藍色代表由我們實作(我們要寫程式)的部份,深藍色的SO,則由硬體元件廠提供。
對照上圖 簡述運作流程如下(控制家裏的電源開關):
1)使用者透過iPhone或Android手機的瀏覽器,登入家庭雲,家庭雲的主頁,就會被傳送到手機的瀏覽器,走的是HTTP協定。
2)使用者選擇頁面上的功能選項如,查詢家裡電燈開關是否開啟,該手機頁面便向WEB Server APP,發出請求。WEB ServerAPP 會調用WAR裡的函式(Servlet的doGet()函式或doPost()函式)。
3)圖中的APP會提供跨行程的服務,供其他APP調用。因為WEB Server APP也是一種 APP,它會幫 WAR 裡的 doGet()調用APP的服務。
4)APP的服務經JNI調用SO,So則驅動 Zigbee Dongle,便能讀取電燈、防盜感測元件的狀態,也能進一步操控它們。
下圖是完整的使用情境。
我上面的圖,doGet()與doPost()應移到war,這是屬於Servlet的公開界面,供web server 調用,特此更正。 - Patrick Cheng
很讚++
請在最後面加上文章連結,已經完成的至少有『上一篇』,這樣方便追蹤,謝謝~
謝謝你的好點子,我在後面的文章,會加上一個"其他文章"的連結。
patrickcheng提到:
4)APP的服務經JNI調用SO,So則驅動 Zigbee Dongle,便能讀取電燈、防盜感測元件的狀態,也能進一步操控它們。
這段比較沒有實作的經驗,謝謝之後的分享。
藉由Jni來整合java與C是android app與iOs app 競爭的空間,值得關注!