WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機
Shindig
Shindig,是一個參考容器,可以運行在任何網(wǎng)站上,用來支持OpenSocial的社交應(yīng)用。它最開始是由Google在2007年開發(fā)的,作為iGoogle的Gadget容器,然后在2007年12月成為Apache的一個開源項目。Shindig的主要目的就是為那些希望使用支持OpenSocial規(guī)范軟件的社交網(wǎng)站提供基礎(chǔ)設(shè)施,使得社交應(yīng)用的開發(fā)者不用去關(guān)心平臺的轉(zhuǎn)換問題。目前,很多社交網(wǎng)站都是基于Shindig實現(xiàn)自己的OpenSocial功能。Shindig的另一個目標(biāo)是多語言實現(xiàn),目前Shindig有Java和PHP兩個版本。Shindig的最新發(fā)布版本是 2.0.1,實現(xiàn)了OpenSocial 1.1的規(guī)范。
Shindig概況[ ]
- 軟件語言: 英語
- 軟件類別: 國外軟件/SNS
- 開發(fā)語言: Java/PHP
- 授權(quán)協(xié)議: 開源
- 運行平臺: Tomcat+JDK/Apache+PHP
- 官方首頁: http://shindig.apache.org/index.html
- 軟件下載: 下載地址
Shindig功能介紹[ ]
Shindig 的主要組件:
- Gadget Container JavaScript(Gadget 容器,JavaScript 類庫):提供諸如 UI 展現(xiàn)、安全、交互、特性擴展等相關(guān)的功能。
- Gadget Rendering Server(展現(xiàn) Gadget 的服務(wù)器):負(fù)責(zé)解析 Gadget XML,轉(zhuǎn)換成瀏覽器使用的 HTML 和 JavaScript。
- OpenSocial Container JavaScript(OpenSocial 容器的 JavaScript 類庫):基于 Gadget 容器的 JavaScript 類庫之上,位于客戶端的 OpenSocial 容器,提供 OpenSocial 相關(guān)的功能,例如存取 People、Activity、AppData 等相關(guān)的社交數(shù)據(jù)。
- OpenSocial Data Server(OpenSocial 數(shù)據(jù)服務(wù)器):提供了特定于某個容器的服務(wù)器端的接口,包括基于 Rest/RPC 協(xié)議的 Services,用于存取 People、Activity、AppData 等相關(guān)的社交數(shù)據(jù),而且提供了清楚的擴展點,其他網(wǎng)站都可以據(jù)此實現(xiàn)自己的服務(wù)
Shindig服務(wù)器端組件構(gòu)成圖:
java版:
php版:
Gadget 由 XML 和其所使用的特性 JavaScript 類庫構(gòu)成,默認(rèn)的 Gadget 容器會將 Gadget 放在一個 iframe 里面來展現(xiàn)。當(dāng) Gadget 容器準(zhǔn)備 Render 一個 Gadget 時,首先會獲取該 Gadget 的 metadata 信息,進(jìn)而通過對應(yīng)的信息組成 iframeUrl,并將該 URL 設(shè)置為 iframe 的 src,此時便會觸發(fā)服務(wù)器端名為“xml-to-html”的 servlet 即 Gadget Rendering Sevlet 負(fù)責(zé)處理這個請求并最終返回 HTML JsonRpcServlet 和 DataServiceServlet 負(fù)責(zé)處理 OpenSocial 相關(guān)的請求,DataServiceServlet 處理 Rest 請求,JsonRpcServlet 處理 RPC 請求,在后臺他們共享同樣的實現(xiàn)。OpenSocial Hanlder 負(fù)責(zé)處理 OpenSocial 相關(guān)的請求,具體由下面各個相關(guān)的 Service 實現(xiàn)。中間的 JsonDBOpenSocialService 則是一個實現(xiàn)了各個 Service 接口的具體實現(xiàn),以 Json 文件作為數(shù)據(jù)源。
Shindig 的項目基于 Maven 構(gòu)建,共有以下幾個子項目(基于 Java 版本的源碼):
- shindig-common: 該項目主要提供了一些基本和公用的方法。
- shindig-gadgets: 該項目主要是 Gadget Render 的 Server 端實現(xiàn),包括解析XML,解析 Gadget 里面用到的特性,重寫內(nèi)容,返回 HTML 到客戶端等。
- shindig-social-api: 該項目主要是 OpenSocial 相關(guān)功能的 Server 端實現(xiàn),提供了 People,Activity,AppData 等的 Service 和 Handler。
- shindig-smaples: 該項目是一個用 JSON 實現(xiàn)了 OpenSocial 存取數(shù)據(jù)的示例。
- shindig-server: 該項目是整個項目的 Server 端配置,包括 web.xml 等。整個項目構(gòu)建完成后會生成一個 war 包,作為一個 Web 應(yīng)用部署到服務(wù)器即可。
- shindig-features: 該項目與語言無關(guān),都是 Client 端的 JavaScript 庫,包括 Gadget 容器,OpenSocial 容器所用到的 JavaScript 類庫,以及一些用到的特性。
- shindig-extras: 該項目與語言無關(guān),可以看作是提供給開發(fā)者擴展 Shindig 的一個參考。Shindig 的整個項目是基于 Guice 框架的,Guice 是 Google 開發(fā)的一個輕量級的依賴注入框架。當(dāng)用戶需要擴展 Shindig 實現(xiàn)自己的功能或特性時,可以與原有的 Shindig 完全隔離,開發(fā)自己的 Guice 模塊就好了,最后通過 Guice 的依賴注入做相應(yīng)的配置就可以。
Shindig客戶端流程:
Shindig 的客戶端包括:Gadget 容器、OpenSocial 容器、JSON、Restful 容器和對 Caja 的支持。對應(yīng)的流程如圖所示:
Shindig 的服務(wù)端流程:
Shindig 的服務(wù)器端流程主要分為兩個核心部分,一個是 Render Gadget,一個是處理 OpenSocial 相關(guān)的請求。Render Gadget 由 GadgetRenderingServlet 處理,如圖 5 所示:首先調(diào)用 doGet 方法,調(diào)用 Renderer 的 render 方法,通過 Process 解析出一個 Gadget 實例,而后調(diào)用具體的 HTMLRenderer 的 render 方法,核心的就是很多的 Rewriter,通過對 Gadget 里面的內(nèi)容進(jìn)行重寫來生成 HTML。
- PipelineDataGadgetRewriter: 如果 Gadget 里面使用了 data-pipelining 的特性,則會調(diào)用該 rewriter 生成容器所需要的數(shù)據(jù)。
- TemplateRewriter: 如果 Gadget 里面用到了 template 的特性,則會用真實的數(shù)據(jù)替換 template 里面對應(yīng)的鍵值。
- ProxyingContentRewriter:如果 Gadget 里面請求的內(nèi)容需要通過 proxy 才能取得,通過該 rewriter 則會強制 Gadget 的請求必須經(jīng)過代理。
- CajaContentRewriter:Caja 是 Google 發(fā)起的一個項目,旨在制訂一個 JavaScript 語言的子集和最佳編程指導(dǎo)方針,約束 JavaScript 程序員編寫的代碼,符合一個更加安全,更加合理的 JS 代碼。如果 Gadget 里面聲明了 Caja 特性,則需要通過這個 rewriter 根據(jù) Caja 的要求重寫 Gadget 里面的內(nèi)容。
- RenderingGadgetRewriter :呈現(xiàn) Gadget 肯定會用到的一個 Rewriter,主要生成 HTML 的元素,根據(jù) Gadget 聲明的特性一一注入所需的 JavaScript 文件。
Gadget容器組件圖:
- shindig.Container 作為核心的容器,提供了創(chuàng)建 Gadget,添加 Gadget 及呈現(xiàn) Gadget 的方法。
- shindig.GadgetServices 提供了設(shè)置 Gadget 的高度、標(biāo)題、用戶參數(shù)設(shè)置等服務(wù)。
- shindig.LayoutManager 提供了獲取 Gadget 的布局信息的接口。
- shindig.Gadget 作為核心的 Gadget 對象,提供了諸如 render、getContent 等方法。根據(jù) Gadget 的特性是否用到 pubsub-2 決定獲取的內(nèi)容,由此需要兩種類型的 Gadget。shindig.IfrGadget 和 shindig.OAAIfrGadget。如果不需要此特性,只需要簡單的返回一個 iframe 作為主內(nèi)容即可,如果需要 pubsub-2 則需要創(chuàng)建 openajaxhub 的容器。
- shindig.UserPrefStore 提供了保存用戶參數(shù)設(shè)置的接口
新的Gadget組件圖:
新的 Gadget 容器相比 shindig-container 更加清晰,使用起來也更加簡單,只需要創(chuàng)建一個 gadget site,然后調(diào)用 navigateGadget 即可。在 shindig 發(fā)布的 2.0.1 版本中,新的 Gadget 容器使用起來還有幾個小 bug,如果您想使用最新的 Gadget 容器,請下載針對新的 Gadget 容器的 patch。新的 Gadget 容器提供了很好的分層結(jié)構(gòu)和擴展性,用戶可以參考該容器實現(xiàn)自己的 Gadget 容器。