欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

如何借助開(kāi)源技術(shù)力量實(shí)現(xiàn)Web 2.0_PHP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解讀Mysql中創(chuàng)建用戶(hù)帳戶(hù)的方法
1.CREATE USER CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ...CREATE USER用于創(chuàng)建新的MySQL賬戶(hù)。要使用CREATE USER,

PHPChina資訊:如果你在Google中搜索“AJAX Web 2.0”,你可以得到上億條搜索結(jié)果,但是你能從中發(fā)現(xiàn)有什么技術(shù)能真正實(shí)現(xiàn)今天的Web 2.0所承諾的東西嗎?雖然Web 2.0至今還沒(méi)有一個(gè)統(tǒng)一的定義,不過(guò)它的核心一定是作為社會(huì)化網(wǎng)絡(luò)平臺(tái)的互聯(lián)網(wǎng),在這個(gè)平臺(tái)上具有相同愛(ài)好的群體可以創(chuàng)建和分享信息。富互聯(lián)網(wǎng)應(yīng)用 (RIA)體現(xiàn)了部分Web 2.0概念,它提供了一個(gè)更加高效的用戶(hù)界面,從而完善了Web 2.0平臺(tái);而AJAX之于Web 2.0之處則在于,它提供了一個(gè)開(kāi)發(fā)RIA應(yīng)用的輕量級(jí)方法,即RIA應(yīng)用可通過(guò)Web瀏覽器這個(gè)單一的界面來(lái)執(zhí)行。

如果研究一下像維基百科和博客等現(xiàn)有社會(huì)化網(wǎng)絡(luò)平臺(tái)的交互模式,你會(huì)發(fā)現(xiàn)它們都缺乏真實(shí)生活中人們交互的即時(shí)性的特點(diǎn)。因此可以把它們稱(chēng)之為準(zhǔn)同步Web模式產(chǎn)品,當(dāng)我們考慮Web 2.0規(guī)范的下一代平臺(tái)時(shí),需要克服這個(gè)缺點(diǎn)。基于互聯(lián)網(wǎng)的聊天應(yīng)用是最接近Web 2.0所需的即時(shí)交互特點(diǎn)的最簡(jiǎn)單例子,但是對(duì)于AJAX技術(shù)來(lái)說(shuō),即便是以一個(gè)可擴(kuò)展、輕量級(jí)、基于瀏覽器的機(jī)制來(lái)實(shí)現(xiàn)這些基本的功能,也是其能力范圍之外的事情。事實(shí)上,如果你仔細(xì)查看上面所說(shuō)的上億條搜索結(jié)果,你會(huì)發(fā)現(xiàn)只有一些開(kāi)源技術(shù)能夠解決通過(guò)標(biāo)準(zhǔn)瀏覽器機(jī)制異步推送內(nèi)容給用戶(hù)的難題。后面我們將粗略介紹一下這些技術(shù),不過(guò)讓我們先從最基本的東西開(kāi)始介紹。

基于Web的推送技術(shù)基本原理

在將異步數(shù)據(jù)推送給瀏覽器方面,業(yè)內(nèi)一直沒(méi)有一個(gè)標(biāo)準(zhǔn)的機(jī)制或名稱(chēng)。在AJAX領(lǐng)域,該技術(shù)有不同的叫法,包括AJAX Push、Comet和Reverse Ajax,但是無(wú)論叫它什么,這些不同的實(shí)現(xiàn)方法具有一個(gè)共同的特點(diǎn)。在瀏覽器中唯一的輕量級(jí)通信機(jī)制就是HTTP協(xié)議,但是它僅僅能夠幫助我們實(shí)現(xiàn)由瀏覽器發(fā)起的到服務(wù)器的通信的請(qǐng)求/響應(yīng)的標(biāo)準(zhǔn)化。要想實(shí)現(xiàn)異步響應(yīng),有必要通過(guò)在服務(wù)器端保持一個(gè)開(kāi)放的請(qǐng)求,當(dāng)有更新的時(shí)候完成這個(gè)請(qǐng)求,實(shí)現(xiàn)對(duì) HTTP協(xié)議的翻轉(zhuǎn)。通過(guò)下圖,我們可以了解標(biāo)準(zhǔn)的AJAX請(qǐng)求過(guò)程和通過(guò)翻轉(zhuǎn)機(jī)制來(lái)推送數(shù)據(jù)之間的不同。

為了支持異步推送,我們需要一直保持一個(gè)瀏覽器連接開(kāi)放,來(lái)等待服務(wù)器端事件來(lái)觸發(fā)瀏覽器中的外觀變化。直覺(jué)告訴我們,這種實(shí)現(xiàn)方式存在問(wèn)題,因?yàn)槲覀冊(cè)跒g覽器和服務(wù)器端都面臨著有關(guān)連接的問(wèn)題。

瀏覽器連接限制

異步Web技術(shù)面臨的主要困難之一典型的瀏覽器“雙連接限制”問(wèn)題。為降低服務(wù)器負(fù)載,HTTP規(guī)范建議,用戶(hù)與每個(gè)服務(wù)器最多同時(shí)建立兩個(gè)連接,但是異步技術(shù)已經(jīng)占用了其中一個(gè)連接作為通知通道使用。那么考慮一下這種情況,多個(gè)瀏覽器窗口打開(kāi)了同一個(gè)Web頁(yè)面,如果每一個(gè)窗口試圖建立它自己的連接,我們迅速會(huì)消耗完可用連接。為了在這個(gè)限制下實(shí)現(xiàn)我們的目的,必須共享使用其中一個(gè)連接,但是出于安全原因,不同瀏覽器窗口的腳本環(huán)境是獨(dú)立分開(kāi)的,這使得共同使用一個(gè)共享連接實(shí)現(xiàn)起來(lái)非常困難。另一個(gè)可以使用的技術(shù)是利用共享的HTTP cookie,通過(guò)它來(lái)實(shí)現(xiàn)與指定服務(wù)器的所有HTTP交互。該cookie被所有窗口所共享,通過(guò)JavaScript操作,還可用于跨窗口通信。

但是,這個(gè)問(wèn)題在portal頁(yè)面環(huán)境下再次被放大,因?yàn)閭鹘y(tǒng)的portal引擎都不支持必需的異步通信方式。為了可以在多個(gè)portlet中使用推送技術(shù),不僅僅需要共享瀏覽器連接,還需要一個(gè)專(zhuān)門(mén)的共享服務(wù)器連接來(lái)聚合異步響應(yīng)。如果portlet是通過(guò)多個(gè)WARs進(jìn)行部署的,情況可能會(huì)更復(fù)雜一些,共享機(jī)制必須在多個(gè)Web應(yīng)用之間協(xié)同工作,而且將需要一些IPC機(jī)制來(lái)實(shí)現(xiàn)。

在我們?cè)u(píng)價(jià)不同的推送機(jī)制的時(shí)候,理解它們?nèi)绾谓鉀Q共享連接的問(wèn)題是非常重要的,因?yàn)檫@個(gè)問(wèn)題比較復(fù)雜,而且超出了一般應(yīng)用程序開(kāi)發(fā)者所能接觸的范圍。另外,瀏覽器廠商們可能會(huì)通過(guò)允許每窗口支持兩個(gè)連接,或者提供具有HTTP pipelining控制支持的XmlHttpRequest,從而允許不同的窗口共享一個(gè)專(zhuān)門(mén)的連接,來(lái)徹底降低連接共享的復(fù)雜性。

應(yīng)用服務(wù)器的可擴(kuò)展性

當(dāng)我們從應(yīng)用服務(wù)器角度來(lái)審視開(kāi)放連接的問(wèn)題時(shí),我們發(fā)現(xiàn)了這個(gè)問(wèn)題的多面性。我們都知道,現(xiàn)在的應(yīng)用服務(wù)器可以高效率的處理大量的連接,但是在現(xiàn)有Servlet模式下,每一個(gè)連接需要執(zhí)行一個(gè)線程。如果這些連接由于偶發(fā)性的服務(wù)器發(fā)起更新而變?yōu)殚L(zhǎng)期存活的話,服務(wù)器的可擴(kuò)展性勢(shì)必受到線程池耗盡的嚴(yán)重威脅。

雖然在servlet模型中關(guān)于異步通信的標(biāo)準(zhǔn)正在JSR315中被實(shí)現(xiàn),但業(yè)界一直在通過(guò)完全不同的非標(biāo)準(zhǔn)化方法來(lái)解決這個(gè)問(wèn)題。標(biāo)準(zhǔn)機(jī)制的缺失讓人非常失望,因?yàn)槿魏慰缮?jí)擴(kuò)展的推送機(jī)制將需要與底層的服務(wù)器機(jī)制來(lái)緊密結(jié)合,需要實(shí)行專(zhuān)門(mén)的部署。好消息是,在開(kāi)源應(yīng)用服務(wù)器上已經(jīng)出現(xiàn)許多不同的解決方案。

Tomcat 6通過(guò)一個(gè)附加的Servlet接口——org.apache.catalina.CometProcessor,提供了異步請(qǐng)求處理(ARP)功能。 CometProcessor可以在當(dāng)數(shù)據(jù)在連接上可讀的時(shí)候,讓Servlet接收事件,而不會(huì)通過(guò)阻塞讀來(lái)消耗一個(gè)線程。與不同的service() 方法相比,基于事件的機(jī)制讓開(kāi)發(fā)者可以很好的對(duì)異步I/O處理進(jìn)行控制。Tomcat 6還提供了一個(gè)CometFilter接口,當(dāng)comet事件被處理的時(shí)候,才激活被調(diào)用的過(guò)濾器鏈。

Glassfish V2/Grizzly通過(guò)類(lèi)com.sun.enterprise.web.connector.grizzly.comet.CometEngine來(lái)提供ARP功能。應(yīng)用程序可以通過(guò)一個(gè)CometHandler來(lái)注冊(cè)接受事件,而且和Tomcat 6一樣,當(dāng)數(shù)據(jù)可用的時(shí)候處理讀事件,反之則執(zhí)行阻塞讀操作。

Jetty 6則在現(xiàn)有servlet API中提供了支持ARP的擴(kuò)展機(jī)制。它的org.mortbay.util.ajax.Continuation類(lèi)提供了suspend/resume 方法,來(lái)掛起請(qǐng)求操作,并在以后讓其在另一個(gè)不同的線程上異步恢復(fù)。當(dāng)在servlet的Service()成員內(nèi)調(diào)用suspend()時(shí),將產(chǎn)生一個(gè)異常,并被Jetty服務(wù)器所捕獲,然后用于確認(rèn)這個(gè)請(qǐng)求是否被恢復(fù)。恢復(fù)這個(gè)請(qǐng)求需要重新調(diào)用service()方法,然后它可以進(jìn)行寫(xiě)響應(yīng)。延長(zhǎng)機(jī)制的一個(gè)復(fù)雜之處是,service()方法必須被明確執(zhí)行來(lái)支持觸發(fā)延伸。更好的做法是可以應(yīng)用過(guò)濾機(jī)制的標(biāo)準(zhǔn)servlet,不過(guò),過(guò)濾器同樣也必須處理觸發(fā)延伸的問(wèn)題。

ICEfaces異步HTTP服務(wù)器AHS算不上是一個(gè)應(yīng)用服務(wù)器,但是它可以與任何應(yīng)用服務(wù)器一起為 ICEfaces應(yīng)用提供ARP支持。和上面所提到機(jī)制不同之處是,沒(méi)有與AHS相關(guān)的編程API,它的功能是專(zhuān)門(mén)針對(duì)ICEfaces的。需要對(duì)AHS 進(jìn)行配置來(lái)處理異步通訊通道,使用一個(gè)邊界線程池來(lái)對(duì)進(jìn)行中的請(qǐng)求匹配更新。它可以被部署在群環(huán)境中,包含一個(gè)servlet模式,可以被用來(lái)在 portal環(huán)境下處理AJAX推送。

開(kāi)發(fā)模式

在簡(jiǎn)單理解了推送機(jī)制和它相應(yīng)的復(fù)雜性之后,很多開(kāi)發(fā)者選擇了對(duì)開(kāi)發(fā)真正的推送風(fēng)格應(yīng)用敬而遠(yuǎn)之。現(xiàn)在將我們的目光轉(zhuǎn)向那些可以幫助我們實(shí)現(xiàn)推送式應(yīng)用程序開(kāi)發(fā)的開(kāi)源AJAX技術(shù)。

Dojo/Cometd/Bayeux提供了一個(gè)以客戶(hù)端為中心的編程模式和一個(gè)通用的可擴(kuò)展到服務(wù)器的發(fā)布/訂閱機(jī)制。我們可以為專(zhuān)門(mén)的消息類(lèi)定義一個(gè)專(zhuān)門(mén)的通道,這些通道的客戶(hù)端可存在于瀏覽器或服務(wù)器中。使用JavaScript應(yīng)用邏輯來(lái)處理從服務(wù)器推送的消息,以及相應(yīng)的更新用戶(hù)界面。從服務(wù)器角度來(lái)看,需要定義一個(gè)推送通道,然后服務(wù)器端應(yīng)用邏輯通過(guò)該通道來(lái)發(fā)布事件。Cometd是一個(gè)非常靈活的機(jī)制,可同時(shí)支持在服務(wù)器端的Java和 Python實(shí)現(xiàn)。Cometd已經(jīng)被集成到Tomcat 6、Grizzly和Jetty 6中。通過(guò)使用一個(gè)支持在窗口之間進(jìn)行大數(shù)據(jù)傳輸?shù)墓蚕韈ookie機(jī)制,瀏覽器連接共享成為可能。從本質(zhì)上來(lái)說(shuō),Cometd方式帶來(lái)了一個(gè)松散耦合的分布式系統(tǒng),因此應(yīng)用開(kāi)發(fā)者需要解決一些相應(yīng)的復(fù)雜問(wèn)題,例如安全性和可維護(hù)性。

DWR/Reverse AJAX則在遠(yuǎn)程過(guò)程調(diào)用RPC基礎(chǔ)上提供了一個(gè)以客戶(hù)為中心的編程模式。簡(jiǎn)單來(lái)說(shuō),DWR通過(guò)JavaScript實(shí)現(xiàn)了從客戶(hù)端調(diào)用服務(wù)器端的 Java對(duì)象,而Reverse AJAX則是從服務(wù)器端的Java對(duì)象來(lái)調(diào)用JavaScript對(duì)象。對(duì)于一次推送交互,要求執(zhí)行一個(gè)JavaScript來(lái)處理特定更新,服務(wù)器端的 Java邏輯必須合理的調(diào)用這個(gè)JavaScript。DWR servlet則通過(guò)HTTP連接來(lái)處理RPC呼叫集合,但是連接共享問(wèn)題在JavaScript執(zhí)行中沒(méi)有得到解決。DWR現(xiàn)已集成到Jetty 6中。

ICEfaces/AJAX推送在JSF基礎(chǔ)上提供了一個(gè)以服務(wù)器為中心的編程模式。ICEfaces對(duì)JSF進(jìn)行了擴(kuò)展之后,可以支持一個(gè)透明AJAX橋,它可以在JSF生命周期的基礎(chǔ)上實(shí)現(xiàn)更多針對(duì)瀏覽器的修改。一個(gè)簡(jiǎn)單的擴(kuò)展API允許應(yīng)用程序邏輯在一些異步事件基礎(chǔ)上請(qǐng)求一個(gè)頁(yè)面刷新,瀏覽器客戶(hù)端的邏輯組合可以同時(shí)接收相同的更新。另外,它還提供了一個(gè)RenderHub功能來(lái)處理底層異步展現(xiàn)機(jī)制的同步和性能優(yōu)化。 ICEfaces可以被配置成從Tomcat 6、Grizzly和Jetty中使用ARP機(jī)制,當(dāng)然還有ICEfaces AHS。ICEfaces橋通過(guò)一個(gè)共享cookie機(jī)制來(lái)支持連接共享,當(dāng)在servlet模式下配置AHS后,可以支持portal環(huán)境中的AJAX 推送。

結(jié)束語(yǔ)

在本篇文章中,我們把Web 2.0看作一個(gè)自然的即時(shí)社會(huì)化網(wǎng)絡(luò)平臺(tái),而且也了解了使用輕量級(jí)Web技術(shù)來(lái)實(shí)現(xiàn)它所要求的推送功能的復(fù)雜性。盡管多數(shù)現(xiàn)有AJAX技術(shù)無(wú)法解決這一問(wèn)題,不過(guò)一些開(kāi)源技術(shù)已經(jīng)出現(xiàn),來(lái)幫助我們實(shí)現(xiàn)這個(gè)必需的功能。因此,有了這些開(kāi)源技術(shù),我們今天就能實(shí)現(xiàn)真正的Web 2.0。另外,隨著標(biāo)準(zhǔn)化的進(jìn)一步落實(shí),下一代瀏覽器實(shí)現(xiàn)也將最終降低實(shí)現(xiàn)這一功能的復(fù)雜性。如果推送式的Web應(yīng)用和Web 2.0已進(jìn)入你的視線,那么投入到其中看看它能實(shí)現(xiàn)的強(qiáng)大應(yīng)用吧。不過(guò),需要提醒大家的是,你應(yīng)該細(xì)心的檢查你現(xiàn)有的最佳開(kāi)發(fā)模式和部署條件,進(jìn)而設(shè)計(jì)一個(gè)方式,可以讓你將精力集中在應(yīng)用程序開(kāi)發(fā)上,而不是底層的推送功能開(kāi)發(fā)上。

分享:揭秘三種php數(shù)組輸出方法
以下為引用的內(nèi)容: $bbbb=array(11=>aaa,22=>bbb); //只能輸出值value不能輸出

來(lái)源:模板無(wú)憂(yōu)//所屬分類(lèi):PHP教程/更新時(shí)間:2009-09-19
相關(guān)PHP教程