1. 程式人生 > >Pomelo 新手入門(四)

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
根據sessionid 進行廣播* 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 Framework

這裡不再對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 多程序相互協作的使用方式