Cocos Creator網(wǎng)絡(luò)游戲開(kāi)發(fā)中的短連接HTTP和長(zhǎng)連接Websocket
在游戲行業(yè)中,網(wǎng)絡(luò)游戲相比單機(jī)游戲的市場(chǎng)份額要大很多。而網(wǎng)絡(luò)游戲的用戶交互性、用戶粘性會(huì)好很多。所以,絕大部分游戲都需要進(jìn)行網(wǎng)絡(luò)連接來(lái)存儲(chǔ)數(shù)據(jù)、實(shí)現(xiàn)玩家之間互動(dòng)等。在項(xiàng)目中,主要使用兩種網(wǎng)絡(luò)操作,短連接http和長(zhǎng)連接websocket,下面就對(duì)這兩種進(jìn)行詳細(xì)說(shuō)明。
一、?短連接http
HTTP:超文本傳輸協(xié)議。
在這里,使用XMLHttpRequest對(duì)象開(kāi)發(fā)客戶端,常用方法和屬性如下:
1、open() 與服務(wù)器連接,創(chuàng)建新的連接請(qǐng)求。
2、send() 向服務(wù)器發(fā)送請(qǐng)求。
3、abort()退出當(dāng)前請(qǐng)求。
4、readyState屬性,提供當(dāng)前請(qǐng)求的狀態(tài),其中4表示準(zhǔn)備就緒。
5、status屬性,提供當(dāng)前的HTTP請(qǐng)求狀態(tài)碼,其中200表示請(qǐng)求成功。
6、responseText屬性,服務(wù)器返回的請(qǐng)求響應(yīng)文本。
7、onreadystatechange屬性,設(shè)置回調(diào)函數(shù)。
其中,open和send函數(shù),以及onreadystatechange屬性是http請(qǐng)求的關(guān)鍵。
open函數(shù)有5個(gè)參數(shù)可以使用。(method,url,async,user,password)
Method:是指發(fā)送請(qǐng)求的類(lèi)型,一般為GET或POST。
Url:要請(qǐng)求的鏈接url。
Async:是否為異步請(qǐng)求,該參數(shù)可選,默認(rèn)是true。
User:如果該請(qǐng)求需要身份驗(yàn)證,這里指定用戶名,無(wú)默認(rèn)值。
Password:如果該請(qǐng)求需要身份驗(yàn)證,這里指定密碼,無(wú)默認(rèn)值。
1. XML HttpRequest中5種就緒狀態(tài)
0:請(qǐng)求沒(méi)有發(fā)出,在調(diào)用open()函數(shù)之前為該狀態(tài);
1:請(qǐng)求已經(jīng)建立但還沒(méi)有發(fā)出,在調(diào)用send()函數(shù)之前為該狀態(tài);
2:請(qǐng)求已經(jīng)發(fā)出正在處理中;
3:請(qǐng)求已經(jīng)處理,響應(yīng)中通常有部分?jǐn)?shù)據(jù)可用,但是服務(wù)器還沒(méi)有完成響應(yīng);
4:響應(yīng)已經(jīng)完成,可以訪問(wèn)服務(wù)器響應(yīng)并使用它。
2. 常見(jiàn)的HTTP狀態(tài)碼
401:表示所訪問(wèn)數(shù)據(jù)禁止訪問(wèn);
403:表示所訪問(wèn)數(shù)據(jù)受到保護(hù);
404:表示錯(cuò)誤的URL請(qǐng)求,表示請(qǐng)求的服務(wù)器資源不存在;
200:表示一切順利;
如果就緒狀態(tài)是4而且狀態(tài)碼是200即可處理服務(wù)器的數(shù)據(jù)。相信做過(guò)Web開(kāi)發(fā)的,對(duì)這一塊一定非常熟悉。有問(wèn)題的同學(xué),也不用擔(dān)心首先必須熟練了解上面知識(shí)點(diǎn)。然后我們來(lái)看代碼。
3. GET請(qǐng)求

4. POST請(qǐng)求

總體來(lái)看就很清晰了,首先得到XMLHttpRequest實(shí)例,然后通過(guò)open打開(kāi)鏈接,之后監(jiān)聽(tīng)下連接狀態(tài)變化,在readyState=4而且status=200時(shí),連接成功,這時(shí)候就可以得到網(wǎng)絡(luò)的數(shù)據(jù)了。最后別忘了,要send一下。注意:如果請(qǐng)求數(shù)據(jù)是string類(lèi)型,需要轉(zhuǎn)為JSON,然后就可以當(dāng)做表來(lái)用了。
當(dāng)然,post請(qǐng)求和get請(qǐng)求有些許區(qū)別,比如參數(shù),設(shè)置頭等。
另外,為改善用戶體驗(yàn),我們要對(duì)請(qǐng)求超時(shí)進(jìn)行相應(yīng)處理,代碼如下。
5. 網(wǎng)絡(luò)請(qǐng)求超時(shí)處理

弱聯(lián)網(wǎng)的游戲可以采用http連接,如果游戲中需要頻繁交互、實(shí)時(shí)獲取數(shù)據(jù)、狀態(tài)同步等,我們一般采用長(zhǎng)連接WebSocket。
二、?長(zhǎng)連接websocket



具體WebSocket的使用可以參考如下網(wǎng)址,在此不在贅述。
https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket