nodejs實例講解

nodejs實例講解

ID:32366787

大?。?8.59 KB

頁數(shù):8頁

時間:2019-02-03

nodejs實例講解_第1頁
nodejs實例講解_第2頁
nodejs實例講解_第3頁
nodejs實例講解_第4頁
nodejs實例講解_第5頁
資源描述:

《nodejs實例講解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、看看node.jschat程序如何實現(xiàn)Ajaxlong-polling長鏈接刷新模式前言    首先,關(guān)于node.js,這里就不再細(xì)說了?! ode.jschat是node.js作者用JS寫的一個多人聊天工具,源代碼公開下載,網(wǎng)址是chat.nodejs.org。作者用這個小例子,來展示如何用nodejs開發(fā)高效率的應(yīng)用程序。對于nodejs的學(xué)習(xí)者來說,是一個很好的例子?! U話不多說,開始今天的主題??v觀這個程序,感覺它的最可貴之處,在于展示了,如何用nodejs實現(xiàn)長鏈接模式的刷新技術(shù)?!?/p>

2、?。ㄟ@個程序不詳細(xì)介紹,重點講解這個功能)Client.js  首先看一段核心代碼:1functionlongPoll(data){23//....此處省略**行45$.ajax({cache:false6,type:"GET"7,url:"/recv"8,dataType:"json"9,data:{since:CONFIG.last_message_time,id:CONFIG.id}10,error:function(){11addMessage("","longpollerror.tryin

3、gagain...",newDate(),"error");12transmission_errors+=1;13//don'tfloodtheserversonerror,wait10secondsbeforeretrying14setTimeout(longPoll,10*1000);15}16,success:function(data){17transmission_errors=0;18//ifeverythingwentwell,beginanotherrequestimmediatel

4、y19//theserverwilltakealongtimetorespond20//howlong?well,itwillwaituntilthereisanothermessage21//andthenitwillreturnittousandclosetheconnection.22//sincetheconnectionisclosedwhenwegetdata,welongPollagain23longPoll(data);24}25});26}  這是client.js中的一段代碼,一

5、看這段代碼,大家應(yīng)該立馬想到兩個字——“遞歸”。在longPoll方法中,再次調(diào)用longPoll方法,典型的遞歸調(diào)用?! 「鶕?jù)這段代碼的語義,可以看出,第一次加載時,會調(diào)用longPoll方法,異步向"/resv"獲取值,如果成功了,執(zhí)行success的方法,立即再次調(diào)用longPoll方法。如果失敗了,執(zhí)行error函數(shù),隔10秒中再次調(diào)用longPoll方法。當(dāng)然,執(zhí)行error方法有一定的次數(shù)限制,由變量transmission_errorsx控制。  大家可能會有一個疑問,這樣一直遞歸循環(huán)

6、獲取數(shù)據(jù),服務(wù)器會不會有很大的負(fù)擔(dān)?在沒有數(shù)據(jù)可獲取的時候,也會一直這樣循環(huán)嗎?當(dāng)然,答案時否定的!并且,nodejs利用自身的特點,很好的處理了這個問題。接著往下看:Server.js現(xiàn)看server中如何回應(yīng)上面client的調(diào)用,核心代碼:1fu.get("/recv",function(req,res){23//對session的驗證和更新......45channel.query(since,function(messages){6if(session)session.poke();7re

7、s.simpleJSON(200,{messages:messages,rss:mem.rss});8});9});  先不要管這個fu.get()是什么意思,它和本次教程無關(guān)??傊浪芑貞?yīng)client的調(diào)用就行了。上面的代碼,除了對session的一些操作之外,只是調(diào)用了channel的query方法。注意傳遞的參數(shù):·since,它紀(jì)錄了一個時間;·匿名方法,它接受一個messages參數(shù),兩個動作:1更新session時間,2返回一個json,即把messages返回給客戶端?! ∮腥丝赡?/p>

8、會有疑問:在這里直接返回messages不行嗎,干嘛還得在一個channel中定義一個方法才操作?答案:如果是那樣,就成了一個死循環(huán),server和client每時每刻都進行著數(shù)據(jù)交互,即使沒有信息可返回。  還是接著往下看吧!  看channel是怎么定義的:varMESSAGE_BACKLOG=200,SESSION_TIMEOUT=60*1000;varchannel=newfunction(){varmessages=[],callbacks=[];this.

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。