最近看了很多關於webkit原理的部落格和資料,大都是介紹整體構架和諸如資源載入、html解析、rendering等服務端程序的原理。
但是新版本的webkit(webkit2)是乙個多程序模型,而不是過去的單程序模型。
這些程序分為兩類,分別是:服務端(webprocess)
和客戶端
(uiprocess)
客戶端資料的缺少使得我對客戶端程序產生了興趣,經過對**的研究,找出了一點門道,這裡分享給大家。
首先介紹一下兩個程序的關係
顧名思義,服務端就是完成客戶端發來的請求並回應,而客戶端就是資源或功能的請求者,只不過他們不像web伺服器和瀏覽器一樣處於不同的機器(一般都這樣),他們只是兩個程序而已。這樣做的好處是使得兩部分隔離,就算服務程序宕了也不影響客戶程序,可以重新啟動,反之亦然,同時多個客戶程序能夠共享同乙個服務程序,減少了資源開銷。兩個程序間的通訊是通過訊息佇列實現的,客戶端傳送訊息到服務端的訊息佇列,服務端在空閒時取出一條訊息並處理,這樣的設計可以減少多程序同步的開銷。在windows下他們是通過命名管道來收發訊息的。
客戶端大部分功能的實現都採用了**模式,即使用者不直接使用訊息機制和服務端通訊,而是通過客戶端的**進行。我們如果看到**中有些類名以proxy結尾,說明這個類就是個**類,使用者通過呼叫他提供的方法就能實現功能,而在**內部實現則是向服務端發出對應的訊息而真正實現所需的功能。
下面介紹乙個典型的呼叫過程:建立乙個webview
我們使用api wkviewcreate來建立乙個webview並得到它的引用webviewref
呼叫過程如下(縮排表示呼叫關係)
::wkviewcreate()
webview::create()
//服務端程序啟動之後的**
processlauncher::didfinishlaunchingprocess()
//和服務端連線建立後,傳送初始化訊息
webprocessproxy::send(init message)
}//通過**傳送訊息建立乙個webview物件
webprocessproxy::createwebpage()
webpageproxy::create()}}
至此,我們就完成了服務端的建立過程並獲得了乙個新的webview引用
最後,希望這篇文章能給研究webkit應用的朋友一些幫助。
由於個人水平有限,文中難免會有錯誤,也希望大家能提出意見和建議!
charles 客戶端程序
本文參考 charles 客戶端程序 客戶端程序工具 client process 顯示使每個請求的本地客戶端程序 客戶端程序工具顯示負責進行每個請求的本地客戶端程序的名稱。客戶端程序通常是您的web瀏覽器,例如firefox.exe,但客戶端程序工具可以幫助您發現許多可能未知的http客戶端。客戶...
瘦客戶端 胖客戶端 智慧型客戶端
胖客戶端模式將應用程式處理分成了兩部分 由使用者的桌面計算機執行的處理和最適合乙個集中的伺服器執行的處理。乙個典型的胖客戶端包含乙個或多個在使用者的pc上執行的應用程式,使用者可以檢視並運算元據 處理一些或所有的業務規則 同時提供乙個豐富的使用者介面做出響應。伺服器負責管理對資料的訪問並負責執行一些...
胖客戶端 瘦客戶端和富客戶端
以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...