干货,pomelo路由解读

pomelo的初衷是后台服务器无状态,因此它可以任意使用配置规则来扩展其后台服务器以承载更多的游戏玩家,但实际上还是要面临A玩家在cs1前台并在bk1后台的问题。 
假如玩家A被分配在了空闲的cs1前台,并且cs1前台路由的是比较合适的bk1后台 


 
看图:由于还有bk2后台,因为cs1需要知道如何来选择此玩家的请求被正确处理。因为逻辑部分最终是落在bk1上的,因此我们认为玩家A在bk1是有状态的。

pomelo的解决方法是实现自己的路由算法 
 
这个路由算法来保证玩家A的请求被正确的处理到了正确的bk上 
如果路由算法不稳定,玩家A被分配到了bk1上,却想通过bk2来处理请求那么就会产生问题。

以chat为例: 
假设玩家A被add到了bk1上,却调用了bk2的send方法,后果是channel无法处理sendmessage请求,因为channel是本地的,每个进程一个自己的channel.因此这个玩家这个请求是不会被处理的。 
来看下chat是如何处理路由的

// 这里是一个稳定输出
// util/dispatcher.js
module.exports.dispatch = function(key, list) {
    var index = Math.abs(crc.crc32(key)) % list.length;
      return list[index];
};

// gateHandler.js
handler.queryEntry = function(msg, session, next) {
  // get all connectors
  var connectors = this.app.getServersByType('connector');
  // select a connector from all the connectors
  var res = dispatcher.dispatch(uid, connectors);
  // do something with res
};


// app.js
// route definition for chat server
var chatRoute = function(session, msg, app, cb) {
  var chatServers = app.getServersByType('chat');

    if(!chatServers || chatServers.length === 0) {
        cb(new Error('can not find chat servers.'));
        return;
    }

    var res = dispatcher.dispatch(session.get('rid'), chatServers);

    cb(null, res.id);
};

// 这个是配置路由算法,在寻找chat时该如何寻找,结合框架上下文,要查找chat的是cs
// 当然了,任何需要rpc到chat后台都需要过这一关
app.configure('production|development', function() {
  app.route('chat', chatRoute);
});

示例中以超级稳定的输出来保证了此玩家每次都被分配到同一个cs上,至于分配到哪个后台,他也是这套做法。 
这给我们一个启示,玩家分配时一定要稳定,否则会出现问题。 
谈谈它的问题,这种算法的不利点在于无论cs2多么空闲,只要是玩家A过来,都是cs1

如果你不配置自己的route算法,那么pomelo将启用默认的route算法。 
实际上你都应该编写自己的路由算法,在大型项目中,我们只要确保路由算法的稳定性,就能轻松应对玩家数量的增涨。

写在结尾 https://www.processon.com/i/568c6ea4e4b0e51d149a085f 
这个网站解决了大家开始设计阶段的问题,轻量级的各种设计模型,强烈推荐 
本文中的插图皆由此工具绘制


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux下安装和使用Pomelo,你可以按照以下步骤进行操作: 1. 首先,你需要在Linux系统上安装Node.js。你可以通过包管理器来安装Node.js,具体的安装方法可以参考[这个链接](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#debian-and-ubuntu-based-linux-distributions) 。 2. 安装完成后,你可以使用npm来全局安装Pomelo命令行工具。你可以在终端中输入以下命令来安装Pomelo: ``` npm install -g pomelo ``` 这样,Pomelo的命令行工具就会被安装到你的系统中。 3. 安装完成后,你可以使用Pomelo命令行工具来创建和管理Pomelo项目。你可以在终端中输入以下命令来查看Pomelo的命令行工具使用方法: ``` pomelo --help ``` 这样,你就可以了解到如何创建和管理Pomelo项目了。如果你想要了解更多Pomelo的相关信息,你可以参考[这个链接](https://github.com/NetEase/pomelo/wiki/Home-in-Chinese) 。 总结起来,你需要先安装Node.js,然后使用npm来全局安装Pomelo命令行工具,最后你就可以使用Pomelo命令行工具来创建和管理Pomelo项目了。希望这些信息对你有帮助!如果你还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux下Pomelo环境配置](https://blog.csdn.net/xufeng0991/article/details/45850207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值