猴子原創,歡迎轉載。轉載請注明: 轉載自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目錄下。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLx8CX3AzLcJTMwIzLcNHZh9GbwV3LcRnblRnbvNWLwd3Lc12bj5idlRmMz92YvNmL3d3dvw1LcpDc0RHaiojIsJye.png)
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
汗.....這個需要自己實作的是在太多了,我改天從我項目中把代碼抽出來建立個demo工程。不好意思咯。有空閑時間的朋友可以自己找資料學學看。