Cocos-JS HTTP網絡請求


網絡結構

網絡結構是網絡構建方式,目前流行的有客戶端服務器結構(C/S結構)和點對點(P2P)結構網絡。

客戶端服務器結構(C/S結構)

這種結構又被稱為Clicent/Server結構,它是一種主從結構。服務器一直處於等待狀態,如果客戶端請求,服務器響應請求,建立連接,提供服務。服務器是被動的,客戶端是主動的。類似於在豪華餐廳點餐,客人是主動的,服務員是被動的。

點對點結構(P2P結構)

這種結構也叫做對等結構網絡,每個節點之間是對等的。網絡分布范圍比較少,通常在一間辦公室或者一個家庭內,適用於移動設備之間的通訊,網絡鏈路層由藍牙和Wifi實現。類似於在吃豪華自助餐,所有的客人都是對等的。

 

考慮到跨平台的需要,Cocos-JS引擎主要采用C/S網絡結構。這種結構主要采用HTTP和HTTPS等傳輸協議。

 

HTTP

HTTP是超文本傳輸協議,Interent的基本協議是TCP/IP,目前使用廣泛使用的是HTTP、HTTPS、FTP、Archie Gopher等是簡歷在TCP/IP之上的應用層協議,不同的協議對應不同的應用。

HTTP是一個屬於應用層的面向對象的協議,由於其簡潔,快速的方式,適用於分布式超文本信息傳輸。

HTTP定義了8中請求方法,OPTIONS,HEAD,GET,POST,PUT,DELETE,TRACE和CONNECT作為Web服務器,至少需實現GET和HEAD方法,其他方法是可選的。

GET方法是向指定的資源發送請求,發送的信息在URL后面。像是使用明信片給別人寫信,“信內容”寫在外面,接觸到的人都可以看到,不安全。

POST方法是向指定的資源提交數據請求服務器進行處理。像是把“信內容”裝入信封寄出去,接觸到的人都看不到,因此是安全的。

 

HTTPS

HTTPS是安全的超文本傳輸協議,是超文本傳輸協議和SSL加密的結合。提供加密通信對網絡服務器身份的鑒定。

HTTPS是HTTP的升級版。與HTTP的區別是,HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80和TCP/IP金星通信。SSL使用40位關鍵字作為RC4流加密算法。這對於商業信息的加密是合適的。

 

使用XMLHttpResquest對象

在web前端開發有一種異步刷新技術AJAX。它的核心技術就是JavaScript對象的XMLHttpResquest,他是一種異步請求技術。

1. open()與服務器連接,創建新的連接請求。

2. send()向服務器發送請求。

3. abort()退出當前請求。

4. readyState屬性,提供當前請求的狀態,其中4表示准備就緒。

5. status屬性,提供當前的HTTP請求狀態嗎,其中200表示請求成功。

6. responseText屬性,服務器返回的響應文本。

7. onreadystatechange屬性,設置回調函數。

其中,open和send函數,以及onreadystatechange屬性是http請求的關鍵。

 

open函數有5個參數可以使用。(method,url,async,user,password)

method是指發送請求的類型,一般為GET或POSt

url是指請求的鏈接

async是否異步請求,該參數可選,默認為true

user如果該請求需要身份認證,這里指定用戶名,無默認值

password如果該請求需要身份驗證,這里指定密碼,無默認值

XMLHttpResquest有5中就緒狀態

0:請求沒有發出,在調用open()函數之前為改狀態

1:請求已經建立但還沒有發出,在調用send()函數之前為改狀態

2:請求已經發出正在處理中

3:請求已經處理,響應中通常有部分數據可用,但是服務器沒有完成響應

4:響應已經完成,可以訪問服務器響應並使用它

 

常見的HTTP狀態碼

401:表示所訪問數據禁止訪問

403:表示所訪問數據受到保護

404:表示錯誤的URL請求,服務器資源不存在

200:表示請求成功

 

如果就是狀態是4,並且狀態碼是200,表示請求完成可以處理服務器數據

Get請求方式

 1 var XMLHttpResquestGet = function (url, callback) {
 2     var request = cc.loader.getXMLHttpRequest();
 3     request.open("GET", url, true);
 4 
 5     request.onreadystatechange = function () {
 6         //如果就緒狀態是4,狀態碼是200則表示請求成功
 7         if(request.readyState === 4 && request.status === 200) {
 8             try{
 9                 console.log("XMLHttpResquestGet     Status:" + request.statusText);
10                 if(callback) callback(true, request.responseText);
11             }
12             catch (e) {
13                 if(callback) callback(false, e);
14             }
15         }
16         else{
17             if(callback) callback(false, );
18         }
19     };
20     request.send();
21 };

 

POST請求方式

 1 var XMLHttpResquestPost = function (url, params, callback) {
 2     var xhr = cc.loader.getXMLHttpRequest();
 3     xhr.open("POST", url);
 4 
 5     xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
 6     xhr.onreadystatechange = function () {
 7         //如果就緒狀態是4,狀態碼是200則表示請求成功
 8         if(xhr.readyState === 4 && xhr.status === 200) {
 9             try{
10                 console.log("XMLHttpResquestPost     Status:" + xhr.statusText);
11                 if(callback) callback(true, xhr.responseText);
12             }
13             catch (e) {
14                 if(callback) callback(false, e);
15             }
16         }
17         else{
18             if(callback) callback(false);
19         }
20     };
21     xhr.send(params);
22 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM