Pomelo實現最簡單的通信-egret。


昨天因為需要開始學習Pomelo 做H5游戲的服務端。

因為個人學習習慣,我從來不適合去跟着文檔看。一般我直接是看下大概的API,但是Pomelo的API全部都是英文的。

昨天我就告訴自己用一下午時間去做一個最基本的通信功能的DEMO。

 

安裝NODE.JS  Phython VS 一切就緒之后就開始了。

 

 

轉到目錄下面,輸入命令 就會創建一個Pomelo項目 ,之后會要求選擇 個人理解就是通信方法把 。

選擇好之后就會生成項目目錄

目錄結構就是這樣的。

 

一開始我以為這樣就可以了啊,但是后來發現不對 總感覺少了點什么,應該是基礎包吧?||環境包?個人理解就是支持程序跑起來的一些基礎類庫。

 

 

直接運行他,就可以了。

 

 

接下來我就瞅這個項目目錄結構 ,當然 我值看Game-server web-server沒大看 ,不過感覺大致差不大多吧。

 

 

先看了下app.js --

app.configure('production|development', 'connector', function(){//其實我不大了解這個方法的具體實現方式,但是我覺得他的功能大概就是設置Connector的連接方式。
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
heartbeat : 3,
useDict : true,
useProtobuf : true
});
});
  connector : pomelo.connectors.hybridconnector,【進去看他的代碼】

Pomelo.connectors.__defineGetter__('sioconnector', load.bind(null, './connectors/sioconnector'));

Pomelo.connectors.__defineGetter__('hybridconnector', load.bind(null, './connectors/hybridconnector'));

Pomelo.connectors.__defineGetter__('udpconnector', load.bind(null, './connectors/udpconnector'));
Pomelo.connectors.__defineGetter__('mqttconnector', load.bind(null, './connectors/mqttconnector'));

他設置了幾個幾個常量咯 根據這個方法選擇通信方式。

  設置完這些,然后我就開始琢磨怎么連上我的第一個WebSocket服務器,哪里都不用改直接跑起來看下把 ,先連接上了再說下一步。

  

 

  其實應該去設置server.json的 里面可以設置 服務端口跟 客戶端端口的,但是我直接用項目創建時候默認的把,上面有個clientPort

  那個是客戶端連接的端口,連接上去之后 

  

我用的是EGRET引擎,所以在論壇里直接找了Pomelo客戶端用的包,用上了 ,這樣 就連接上去了 。加下來才是終點

 

最簡單的通信,先看下客戶端我是這么些的

  

  this.socket.request("connector.entryHandler.join", {//requst(@網友說這叫路由地址,在我看來這個參數就是寫Connector(服務器路由?每個路由單獨處理屬於自己的工作 分工明確提高效率?).文件名(為毛不是類名).方法名--。那個在,@參數,@回調//這個回調 ,不是可以說是通信完成的回調,但也不能說完全就是,因為這個回調干不干活觸不觸發還要看服務端)
"uid":UID,
"rid":RID ,
"target": TAG
}, function (result) {
console.log(result);
});

})

/**
上面那是客戶端調用湖物端的方法,他那寫好了 就要在湖物端開始寫要觸發的方法了

**/
Handler.prototype.join = function (msg, session, next) {
var self = this;                    
console.log(msg.uid);  
var id = msg.uid + "*" + msg.rid;
console.log(id);    msg就是前端發過來的msg

var sessionService = self.app.get('sessionService');
next(null, {
code: 500,
error: true
});
return;

var chanel = this.ChannelServers.getChannel("pomelo", true); //關鍵就是這個Chanl啊 chanl就是一個對象,我理解就是一個麻將桌,你給他創建編號 就能王這個麻將桌里面放人進去,嘿嘿 。所有用戶觸發JOIN的時候都會獲取叫“pomelo”的麻將桌,然后把自己加進去 ,后面那個參數就是如果麻將桌還沒創建 就創建一個新的
chanel.add(msg.uid, this.app.get('serverId'));//加入Chanel,UID的話 按正常的 應該是綁定sesson的uid 只是我把session-uid放在后面去綁定 所以就,這樣就區分了第二個參數 是綁定的是SESSION uid 還是每個玩家app里面那個id ,答案是后者
var rid = msg.rid;
var uid = msg.uid;
msg.sid = msg.rid;
session.bind(uid);
session.set('rid', rid);
session.push('rid', function (err) {
});

  發送聊天消息-服務端

  
Handler.prototype.Chatto = function (msg, session, next) {
var uid = session.uid;
var sid = session.get("rid");
var uid = session.uid;

console.log("uid=" + uid + "--sid=" + sid);
var chanel = this.ChannelServers.getChannel("pomelo", true);
console.log(chanel.records);
next(null, {"msg": "uid=" + uid})
if (chanel.getMember(uid)) {
chanel.pushMessage("back", {"msg": "玩家:" + uid + "-->發布信息"});
}
}}

其實按功能上來說 就是通過Chanel去轉發那些個你想要轉發出去的信息 ,所以說套路是這樣 更復雜的我也還沒做過 ,但是復雜的 就是 很多簡單的扣在一起換着玩法去寫吧。






  

 


免責聲明!

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



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