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