pomelo研究笔记-RPC服务端

POMELO 采用多进程的架构可以很好的实现游戏服务器(进程)的扩展性,达到支撑较多在线用户、降低服务器压力等要求。进程间通信采用RPC的形式来完成,pomelo的RPC实现的相当精巧。采用类似如下的方式就可以调用remote服务器提供的服务:

proxies.user.test.service.echo(routeParam, 'hello', function(err, resp) {
   
    if(err) {
        console.error(err.stack);
        return;
    }
    console.log(resp);
});

上面的一段RPC调用可以理解为:
调用namespace类型为user、服务器类型为test的service模块的echo接口
现在听着有些拗口,没关系,且听我慢慢来分析:)


服务端源码分析

pomelo-rpc的源码我阅读+debug了不下30次,下面我将依照从底层数据交换模块到上层业务逻辑分发处理的方式依次介绍服务端与客户端的源码架构。

1. 基于socket.io模块的数据通信模块

一般来说我们在写socket数据通信模块有几个问题是必须要去解决的,譬如说:
  • 粘包的问题
  • 丢包以及乱序的问题
  • ip地址过滤
  • 缓冲队列的实现
  • 与上层模块的交互模式
这里把pomelo-rpc实现过的来说一说。nodejs 内置一个events模块。这也导致了把一个模块封装成一个事件收发器是相当自然的一件事情:
var Acceptor = function(opts, cb) {
   
    EventEmitter.call(this);
    this.bufferMsg = opts.bufferMsg;
    this.interval = opts.interval || 300;
    this.whitelist= opts.whitelist;

    this._interval = null;
    this.sockets = {};
    this.msgQueues = {};

    this.server = null;
    this.notify = cb;
};

util.inherits(Acceptor, EventEmitter);

利用node内置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值