cocos-js Http方式網絡請求


(轉http://blog.csdn.net/sinat_28338727/article/details/52804167

網絡結構

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

客戶端服務器結構網絡

客戶端服務器結構網絡是一種主從結構網絡。服務器一般處於等待狀態,如果有客戶端請求,服務器響應請求,建立連接,提供服務。服務器是被動的,客戶端是主動的。

點對點結構網絡

點對點結構網絡也叫對等結構網絡,每個節點之間是對等的。
考慮到跨平台的需要,Cocos2d-JS引擎主要采用C/S結構網絡。
客戶端服務器應用層最主要采用的是HTTP和HTTPS等傳輸協議。因此有必要介紹一下HTTP和HTTPS:

HTTP

HTTP是超文本傳輸協議,Internet的基本協議是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后面。GET方法應該只用在讀取數據,如靜態圖片等數據。
POST方法是向指定資源提交數據,請求服務器進行處理。
GET方法像是使用明信片給別人寫信,“信內容”寫在外面,接觸到的人都可以看到,不安全。
POST方法像是把“信內容”裝入到信封中給別人寫信,接觸到的人都看不到,因此是安全的。

HTTPS

HTTPS即安全產文本傳輸協議,是超文本傳輸協議和SSL的組合。提供加密通信及對網絡服務器身份的鑒定。
簡單地說。HTTPS是HTTP的升級版。與HTTPS的區別是,HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80和TCP/IP進行通信。SSL使用40位關鍵字作為RC4流加密算法。這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證。如果需要,用戶可以確認發送者是誰。

使用XMLHttpRequest對象開發客戶端

在Web前端開發中有一種異步刷新技術-AJAX。
AJAX的核心是JavaScript對象XMLHTTPRequest,該對象在Internet Explore5中首次引入,它是一種支持異步請求的技術。借助於XMLHttpRequest對象可以使用JavaScript語言向服務器提出請求並處理響應。

使用XMLHttpRequest對象

由於在Web中使用XMLHttpRequest對象發出HTTP請求和普遍,Cocos2d-JS引擎對其平台進行了移植。可以在cocos2d-JS JSB本地平台和Cocos2d-html的web平台中使用了XMLHttpRequest對象。
XMLHttpRequest對象中常用的函數和屬性如下:
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,要請求的鏈接url
async,是否為異步請求,該參數可選,默認是true
user,如果該請求需要身份驗證,這里指定用戶名,無默認值
password,,如果該請求需要身份驗證,這里指定密碼,無默認值

XML HttpRequest中有5種就緒狀態:

1、0:請求沒有發出,在調用open()函數之前為該狀態
2、1:請求已經建立但還沒有發出,在調用send()函數之前為該狀態
3、2:請求已經發出正在處理中
4、3:請求已經處理,響應中通常有部分數據可用,但是服務器還沒有完成響應
5、4:響應已經完成,可以訪問服務器響應並使用它

常見的HTTP狀態碼如下:

401:表示所訪問數據禁止訪問
403:表示所訪問數據收到保護
404:表示錯誤的URL請求,表示請求的服務器資源不存在
200:表示一切順利
如果就緒狀態是4而且狀態碼是200即可處理服務器的數據

這里是GET方式請求

var httpHelper = {};
httpHelper.get = function(url, callback){
    var request = cc.loader.getXMLHttpRequest();
    console.log("Status: Send Get Request to " + url);
    request.open("GET", url, true);

    request.onreadystatechange = function () {
        if (request.readyState == 4 && (request.status >= 200 && request.status <= 207)) {
            var httpStatus = request.statusText;
            var response = request.responseText;
            console.log("Status: Got GET response! " + httpStatus);
            callback(true, request);
        }else{
            callback(false, request);
        }
    };
    request.send();
};

使用如下


  
  
  
          
var reqUrl = "";
httpHelper.get(reqUrl, function (isSuccess, data) {});

這里是POST方式:

httpHelper.post = function(url,params,callback){  
        var nums = arguments.length  
        if(nums == 2){  
            callback = arguments[1];  
            params = "";  
        }  
        var xhr = cc.loader.getXMLHttpRequest();  
        xhr.open("POST", url);  
        xhr.setRequestHeader("Content-Type","text/plain;charset=UTF-8");  
        xhr.onreadystatechange = function () {  
            if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status <= 207)) {  
                err = false;  
            }else{  
                err = true;  
            }  
            var response = xhr.responseText;  
            callback(err,response);  
        };  
        xhr.send(params);  
    }

使用如下:

httpHelper.post("http://127.0.0.1:3000/test","id=1&ids=2", function(err,data){  
 if(err){  
 //錯誤處理  
 }else{  
 cc.log(data);  
 }  
 })


免責聲明!

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



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