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

4. POST請求

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

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



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