Pomelo 新手入門(四)
前言
今天我們介紹一下Channel 廣播機制和RPC 的使用。
<!--more-->
Channel
對於一個遊戲伺服器,而言,把訊息推送給玩家,這是一個很基礎的功能,在pomelo 裡面用Channel 進行訊息的推送服務,要進行訊息的推送,Channel提供了兩種方式:
- 匿名Channel
- 具名Channel
匿名Channel
什麼是匿名Channel?匿名Channel就是直接使用channelService進行訊息推送,在api 中提供了兩種方式
這種是指定使用者Session 裡面的繫結的UID(session.bind(uid);
)推送到那個session
uid 的方式有四個引數
- route String type
- msg Object type
- uids Array Type
[{uid: userId, sid: frontendServerId}]
主要數組裡面每個物件的屬性 - cb - cb(err) 錯誤的回撥
例子:
``` js
var uidArray = new Array();
uidObject.uid = "session uid";
uidObject.sid = "connector-server-1";
uidArray.push(uidObject);
channelService.pushMessageByUids('onMsg',{msg:msg},uidArray,function(err){
if(err){
console.log(err);
return;
}
});
第二種就是把訊息廣播到所有連線在frontend 伺服器的客戶端.* stype String type
>指定我們需要廣播的frontend 型別,注意這裡不是frontend id 而是型別,例如`connector`如果你配了多臺伺服器,訊息會廣播到所有連線在這種型別frontend的客戶端上。* route String type
>如'onMsg'* msg Object type
* opts Object type
>自0.4.x 的配置只有一個引數 opts.binded Boolean type
>true根據session 的uid 進行廣播,false 根據session的id 進行廣播* cb
``` js
channelService.broadcast('connector' ,'onMsg', msg, {binded: true}, function(err){
if(err){
console.log(err);
}
});
具名Channel
具名Channel 就是我們在pomelo 建立一個推送房間。用於維護需要長期訂閱關係的業務,例如,聊天的頻道,注意使用具名Channel 如果那個Channel不在使用,需要顯式呼叫銷燬介面。
例子:
//建立Channelvar channelName ='allPushChannel';var channel =this.channelService.getChannel
//把使用者新增到channel 裡面if(!!channel){
channel.add(uid, sid);}
//根據Channel 名字推送訊息var channelName ='allPushChannel';var pushChannel =this.channelService.getChannel(channelName,false);
pushChannel.pushMessage('onMsg',{msg: msg},function(err){if(err){
console.log(err);}else{
console.log('push ok');}});
以上就是pomelo 有關推送的全部內容,用pomelo進行訊息的推送就是這麼簡單!
RPC使用
從pomelo 框架圖裡面我們可以知道,pomelo 是一個多程序相互協作的環境。關於這方面的pomelo是如何實現的可以閱讀官方的
這裡不再對pomelo如何實現rpc 進行描述,針對原文件的一些不清晰的地方進行補充。
如何使用rpc 服務,讓frontend 能夠呼叫backend 的方法?
要實現這個目的很簡單。
根據Pomelo 的相關閱讀。首先在handler 同級目錄下建立一個remote目錄,建立一個backendRemote
檔案(具體可以參考分散式聊天的例子)
值得注意的是,我們呼叫遠端方法的時候,第一個引數需要是Session值。
//遠端服務端
backend.kick =function(uid, sid){}//呼叫遠端服務的時候,我們要需要從app 獲得rpc服務var rpc = app.rpc;//代理端的完整寫法
rpc.frontend.kick =function(session, uid, sid){}
以上就是pomelo 多程序相互協作的使用方式