前言:
上一篇我們成功地運(yùn)行了一個(gè)最簡(jiǎn)單的測(cè)試工程,其實(shí)就是HelloWorld工程了尉桩。這一篇我們要裝一個(gè)pomelo教程中提到的聊天室chatforpomelo工程進(jìn)行深入學(xué)習(xí)俗孝,同時(shí),不只用官方的web-server來(lái)測(cè)試魄健,還要用我們的cocos creator客戶(hù)端來(lái)進(jìn)行測(cè)試赋铝。
1.安裝chatofpomelo:
詳細(xì)內(nèi)容參考教程:Chat源碼下載與安裝
cd ~/prog
git clone https://github.com/cynron/chatofpomelo-websocket.git
下面,我們不能完全跟著教程走沽瘦,因?yàn)楝F(xiàn)在的版本新了很多革骨。先修改一下服務(wù)端game-server里面的package.json,將里面的pomelo: "0.8.0"改為現(xiàn)在的版本2.2.5析恋。然后順手改一下app.js良哲,打開(kāi)發(fā)現(xiàn)已經(jīng)改過(guò)了:app = express();那為什么創(chuàng)建新工程的模板不修改一下呢助隧?
然后回到chatofpomelo-websocket的根目錄筑凫,運(yùn)行:
sh npm-install.sh
配置成功后,按慣例下game-server目錄運(yùn)行pomelo start并村,下web-server目錄運(yùn)行node app
然后巍实,打開(kāi)瀏覽器,輸入http://127.0.0.1:3001/index.html
輸入與用戶(hù)名和通道號(hào)就進(jìn)入聊天室了哩牍。
測(cè)試發(fā)現(xiàn)棚潦,聊天室在用戶(hù)退出后,會(huì)報(bào)錯(cuò):
[ERROR] pomelo-rpc - [mqtt-mailbox] rpc connector-server-1 callback timeout 30000, remote server 6 host: 127.0.0.1, port: 6050
后面還有幾個(gè)錯(cuò)膝昆,都是從這個(gè)callback timeout衍生的問(wèn)題丸边。官方論壇查一下,貌似更新2.2.x后荚孵,很多人都碰到各種callback timeout的錯(cuò)妹窖,群里問(wèn)了一下,說(shuō)是以前程序?qū)懙貌粐?yán)密收叶,callback為null沒(méi)有問(wèn)題骄呼,但是現(xiàn)在就會(huì)報(bào)錯(cuò)。
將pomelo版本回退到1.2.3是可以考慮的一個(gè)選擇,但是這樣谒麦,最好將node版本降到4.x版本俄讹,否則又會(huì)有其他不兼容的問(wèn)題哆致。
我們嘗試修改一下服務(wù)端的connector/handler/entryHandler.js绕德,將其中的onUserLeave函數(shù)修改為:
var onUserLeave = function(app, session) {
if(!session || !session.uid) {
return;
}
app.rpc.chat.chatRemote.kick(session, session.uid, app.get('serverId'), session.get('rid'), function(){
console.log("====== kick callback over! ======");
});
};
也就是在kick的最后加了一個(gè)回調(diào)函數(shù)。然后摊阀,修改chat/remote/chatRemote.js耻蛇,將最后的kick函數(shù)修改為:
ChatRemote.prototype.kick = function(uid, sid, name,cb) {
var channel = this.channelService.getChannel(name, false)
// leave channel
if( !! channel) {
channel.leave(uid, sid);
}
var username = uid.split('*')[0];
var param = {
route: 'onLeave',
user: username
};
channel.pushMessage(param);
cb();
};
就是在函數(shù)入口增加一個(gè)cb的參數(shù),函數(shù)最后加上cb()來(lái)回調(diào)胞此。
最后開(kāi)啟聊天室測(cè)試臣咖,一切正常。其實(shí)我也不知道為什么這么改漱牵,靠摸索測(cè)試來(lái)的夺蛇,反正就是加上回掉,加上回調(diào)酣胀,加上回調(diào)刁赦。重要的事情說(shuō)三遍。
2. 安裝Cocos Creator客戶(hù)端
參考:http://www.reibang.com/p/c64f7607adee
感謝作者提供的庫(kù)文件以及其他所有的貢獻(xiàn)闻镶。在windows機(jī)器上(Creator不支持linux甚脉, sigh!)铆农,進(jìn)入作者的github主頁(yè)牺氨,下載源碼放到CocosCreator工程目錄下。
作者用的creator為1.1版本墩剖,在1.3版本以前這個(gè)庫(kù)貌似都能正常運(yùn)行猴凹,但是creator升級(jí)1.4以后,會(huì)報(bào)各種錯(cuò)啊岭皂,仔細(xì)看了一下精堕,作者源碼大概需要做一下修改:
- pomelo-client中第5行,將var Protocol = window.Protocol修改為:
var Proctocol = require("protocol");
- protobuf.js第37行:修改為:
})(typeof(window) == "undefined" ? module.exports :{}, this);
就是將{this.protobuf = {}}蒲障,修改為{}歹篓。原來(lái)的用法貌似有語(yǔ)法錯(cuò)誤。
- protocol.js最后揉阎,第350行庄撮,修改為:
})(typeof(window)=="undefined" ? module.exports : {}, typeof(window)=="undefined" ? Buffer : Uint8Array, this);
還是跟第二個(gè)修改一樣的問(wèn)題。
如此毙籽,pomelo客戶(hù)端就完全正常了洞斯,連警告都沒(méi)有。
Linux機(jī)器上將服務(wù)端啟動(dòng)起來(lái),windows機(jī)器運(yùn)行Creator客戶(hù)端:
點(diǎn)join加入房間烙如,一切正常么抗,可以和web的客戶(hù)端正常聊天。
后續(xù)我們即將在這個(gè)聊天室基礎(chǔ)上亚铁,不斷學(xué)習(xí)和實(shí)踐蝇刀,構(gòu)筑類(lèi)似我們正式需求的服務(wù)端。
The End