天天看點

cocos2d-x 開發網絡遊戲(http post&socket)

猴子原創,歡迎轉載。轉載請注明: 轉載自Cocos2D開發網--Cocos2Dev.com,謝謝!

原文位址: http://www.cocos2dev.com/?p=274

最近開發一個手機版的多人線上遊戲,和伺服器通訊要用到socket長連接配接和http短連接配接。剛好這幾天有不少人問我這方面的知識。我今天就給大家講下吧。

大家應該知道在cocos2d-x上面使用socket一般有BSDSocket,http一般用curl,但實際用的過程中還是有很多問題。之前也有很多人寫過這方面的教程,我就不重複了,我說下我自己在項目中使用的。

Socket我使用boost,http請求使用libhttp。

socket比較麻煩,先說libhttp吧。

一、libhttp的使用方法:

1、首先去網上下載下傳這三個資源檔案:curl、jsoncpp、libhttp。

2、下載下傳好後,将他們加到自己的工程libs目錄下。

cocos2d-x 開發網絡遊戲(http post&socket)

http請求:(這是異步請求)

裡面設計到的函數在這幾個頭檔案中

#include "json.h"

#include "Http.h"

Json::Value BYGameApiRequest::gameLogin(const std::string &name,const std::string &psw){

RequestParam params;

// params就是存放需要post到伺服器的資料

// params.addParam("name", name);

// params.addParam("psw",psw);

Response response;

m_request->syncRequest(BY_GAME_API_URL+BYMethod::GAME_LOGIN+"?userId="+name, Request::Post, params, &response);

Json::Value root=NULL;

Json::Reader reader;

// cout << response.getRawData();

string res=string(response.getRawData(),response.m_rawDataSize);

reader.parse(res.c_str(), root, false);

return root;//這就是伺服器傳回的json資料格式。

}
           

上面的這個方法,就可以實作和伺服器的post請求,這個函數一般放在什麼地方好呢?

我的建議是,在遊戲工程中建立一個單例類GameAPIRequest,這個單例類就負責請求所有的api資料,一般請求的api是有自己公司定義的格式的,是以所有的函數、參數,我建議建立一個Config和Method的配置類,專門宏定義格式給GameAPIRequest使用。

這樣伺服器修改了格式什麼的,隻需要在配置類中修改就可以了。

二、socket使用方法:

添加boostframework庫到libs,這個需要自己将boost打包成.framework

cocos2d-x 開發網絡遊戲(http post&amp;socket)

汗.....這個需要自己實作的是在太多了,我改天從我項目中把代碼抽出來建立個demo工程。不好意思咯。有空閑時間的朋友可以自己找資料學學看。