日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gears 的应用

發布時間:2024/1/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gears 的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Gears是什么
Gears是由Google公司開發維護的一個開源項目,該項目的目的是通過增強瀏覽器特性,使得支持強大的Web應用。
Gears的主要特點如下:
1. 使得Web應用程序可以非常自然的與桌面交互(Desktop)
2. 支持資源本地化(LocalServer)
3. 將訪問的數據本地存儲在關系數據庫中(Database)
4. 高效的后端執行Javascript腳本(WorkerPool)

二、Gears框架
下圖是從Google Gears Documentation中抓出來的,這篇有關Gears體系結構的文章,分析了在設計Gears時所考慮的一些有關數據傳送和同步方面的問題,有些意思(http://code.google.com/apis/gears/architecture.html)。

如上圖所示,網絡鏈接的情況下,Web應用程序按照下列方向通信
Application UI->Data Switch->Server Data Layer->Internet
如果此時網絡出現問題,則Data Switch模塊會將數據暫存在本地數據庫中,等網絡可用時,再將這些緩存數據提交到服務器。過程如下:
Application-UI->Data Switch->Local Data Layer->Database->Sync Engine

從Gears的整體代碼結構看,可以看出主要由下面幾個方面組成:
1. 本地服務器,讀取和存儲離線程序資源
2. 小型數據庫(SQLite),用于存儲本地數據
3. 工作池,將本地數據與服務器后臺同步
4. 桌面模型,讓網絡應用程序的操作與桌面程序緊密接合
5. 地理定位,讓網絡程序偵測到當前用戶的位置信息

三、Gears的安全模型
Gears使用Same Origin Policy安全策略,即只有擁有相同SCHEME,HOST, PORT的URI才能互相訪問資源。對于不同源之間的資源互訪,目前還處于研究和開發中。
下面是Same Origin Policy的樣列:
Compared URL ??? ??????????????????????????????????????????????? Outcome ??? Reason
http://www.example.com/dir/page.html ????????????????? Success ??? Same protocol and host
http://www.example.com/dir2/other.html ??????????????? Success ??? Same protocol and host
http://www.example.com:81/dir2/other.html ?????????? Failure ?? ?? Same protocol and host but different port
https://www.example.com/dir2/other.html ? ? ? ? ? ? ? Failure ? ? ? Different protocol
http://en.example.com/dir2/other.html ?? ? ? ? ? ? ? ? ? Failure ? ? ? Different host
http://example.com/dir2/other.html ? ? ? ? ? ? ? ? ? ? ?? Failure ?? ?? Different host (exact match required)
http://v2.www.example.com/dir2/other.html ? ? ? ? ?? Failure ? ? ? Different host (exact match required)
當用戶第一次使用Gears API時,會彈出權限對話框,讓用戶確認是否允許應用程序將數據存儲在用戶的硬盤上。對于擁有相同Origin的網站,一旦用戶確認允許使用Gears API,則Gears會記住用戶的選擇,之后的操作不會再次提示
對于終端用戶的數據安全,Gears并沒有做任何特別的處理,這完全是依賴于操作系統本身的多用戶保護機制。使得不同登錄用戶都有一份自己的私有Gears數據,并且不允許相互訪問(這個功能依賴于操作系統)

四、代碼框架分析
4.1 源碼目錄結構

gears/
???????? |-base
???????? |-blob
???????? |-canvas
???????? |-console
???????? |-database
???????? |-desktop
???????? |-factory
???????? |-geolocation
???????? |-httprequest
???????? |-image
???????? |-inspector
???????? |-installer
???????? |-localserver
???????? |-media
???????? |-notifier
???????? |-timer
???????? /-workerpool
third_party

Summary
Factory - 實例化Gears對象
Blob - 描述二進制數據
Canvas - 提供圖片處理功能
Database - 提供SQL數據庫,將數據存儲在本機
Desktop - 提供訪問桌面功能的接口
Geolocation - 提供獲取用戶地理位置信息的接口
HttpRequest - 提供HTTP請求的封裝
LocalServer - 緩存應用程序資源,使得資源可以離線訪問
Timer - 為WorkerPool中的工作線程提供定時器功能
WorkerPool - 提供異步運行Javascript代碼的功能

4.2 Gears插件初始化
下面以Android平臺下的Gears插件作為示例,描述幾個主要功能模塊的實現。由于Gears插件支持多個瀏覽器平臺(Android, Firefox,IE,Chrome,Safari等),因此,對于每個Javascript對象的實現類都提供了對應的實現接口,并且以文瀏覽器名稱作為實現類文件的結尾。比如Android平臺上的插件使用NPAPI接口實現,則所有與本地插件相關的代碼都是以xxx_np作為文件名稱。

Gears提供了gears_init.js的初始化腳本,該腳本會根據不同的瀏覽器類型向瀏覽器引擎請求載入Gears插件。在Android中,當DOM對象的MIME類型為"application/x-googlegears",則會使得WebView動態加載gear動態庫,并且創建Gears的Javascript對象。在gears_init.js腳本中首先會使用google={}創建一個空對象,然后使用google.gears = { factory : factory }創建google對象的gears屬性。
Android的插件初始化工作在gears/base/npapi/module_android.cc文件中的NP_Initialize函數中完成。該函數做了下面幾件事情:
a) 檢測NP版本號和是否支持插件線程的異步調用
b) 將瀏覽器回調函數表使用線程本地化保存在分配的線程數據結構槽中(ThreadLocals)
c) 將當前線程注冊為主線程
d) 如果使用類加載器,則會將指定的JAR包加載到虛擬機里
e) 清除垃圾文件
f) 在瀏覽器線程中創建消息隊列(ThreadMessageQueue::GetInstance()->InitThreadMessageQueue())
g) 初始化HttpRequest對象(HttpRequestAndroid::InitJni())
h) 初始化插件設置對話框(InitializeSettingsDialogClickHandler())
i) 初始化LocalServer所需使用的URL攔截器(UrlInterceptAndroid::create)
j) 開啟新線程檢測是否有更新(LibUpdater::StartUpdateChecks())

4.3 創建Gears Javascript對象
當插件初始化完畢后,會使用NPP_New接口創建一個NPObject實例,在NPP_New函數的實現方法中,使用CreateGearsFactoryWrapper函數創建了第一個全局Gears Javascript對象(factory),該對象的內部名稱為GearsFactoryImpl,它定義了5個方法:hasPermission,version,create,getBuildInfo以及getPermission。所有的其他Gears對象,都是由該工廠對象的create方法創建的。
目前支持的屬性對象有:
beta.database???????????????? GearsDatabase
beta.desktop?????????????????? GearsDesktop
beta.failblob??????????????????? GearsBlob ( debugging )
beta.geolocation????????????? GearsGeolocation
beta.httprequest????????????? GearsHttpRequest
beta.localserver?????????????? GearsLocalServer
beta.timer??????????????????????? GearsTimer
beta.workerpool?????????????? GearsWorkerPool
beta.blobbuilder?????????????? GearsBlobBuilder
beta.canvas???????????????????? GearsCanvas
beta.databasemanager?? GearsDatabase2Manager
beta.dummymodule??????? GearsDummyModule
beta.console???????????????????? GearsConsole
beta.test?????????????????????????? GearsTest

構建JS模塊
CreateModule(base_class.h)

4.4 比較重要的數據結構

JsCallContext(js_types.h),該對象封裝了Javascript對象的函數調用上下文,本地代碼通過該接口可以獲取傳入的參數個數,參數類型,以及返回對象或者設置異常。

ModuleEnvironment(base_class.h),該對象描述了模塊創建的環境信息,包含安全信息(SecurityOrigin),JS上下文信息(JsContextPtr),權限管理信息(PermissionsManager),JS引擎信息等(JsRunnerInterface)

JSRunnerInterface(js_runner.h), 該對象是一個與平臺無關的接口,其主要的作用是支持Javascript對象的創建,Javascript函數的訪問,以及Javascript代碼的運行。其實現代碼位于js_runner_xx.cc。

PermissionManager(permission_manager.h),該對象實現了一個基于Security Origin Policy的安全管理機制

一下是對Javascript內建對象的C/C++封裝(平臺無關)
JsArray - 封裝了Javascript規范中的Array對象
JsObject - 封裝了Javascript規范中的Object對象
JsToken - Javascript標記,是所有Javascript內建對象的抽象,可以通過下列方法將對應的Javascript內建對象轉換成標記
??? BoolToJsToken
??? IntToJsToken
??? StringToJsToken
??? DoubleToJsToken
??? NullToJsToken
??? UndefinedToJsToken
??? 以下是幾個功能函數,判斷該Token是否是對應類型
??? JsTokenIsCallback
??? JsTokenIsArray
??? JsTokenIsObject
??? JsTokenIsNullOrUndefined

4.5 資源本地化(GearsLocalServer)
GearsLocalServer描述了WebCacheDB中定義的數據集合,并且可以將這個集合作為一個組進行管理。LocalServer使用Domain,Name,Required_Cookie以及Server_Type幾個值來標識一個唯一的屬性。WebCache系統支持兩種類型的本地化服務:資源存儲(ResourceStores)和托管資源存儲(ManagedResourceStores)
GearsResourceStore資源存儲(實現類ResourceStore)
該對象提供了資源捕獲接口,實際的捕獲操作由CaptureTask完成
GearsManagedResource 托管資源存儲(實現類ManagedResourceStore)
該對象提供了checkForUpdate方法,用戶通過顯示的調用該方法,可以完成已托管資源和服務器資源的同步。函數通過創建UpdateTask對象完成實際的資源同步操作。

4.6 用戶數據緩存(DataBase)
Gears插件中使用SQLite作為數據存儲引擎,其操作接口由GearsDatabase提供。

4.7 工作池(WorkerPool)

工作池概念的引入,使得同時可以運行多個JS腳本。這個過程實際上是通過一個線程池完成的,每次有創建一個工作者請求時,WorkerPool對象會從線程池中創建一個新線程,由該線程負責JS腳本的解析和執行。線程池的管理由PoolThreadsManager對象處理。

總結

以上是生活随笔為你收集整理的Gears 的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。