pomelo研究笔记-RPC客户端

1. mailbox数据收发模块

一个RPC客户端可能同时需要调用多个远端(server)提供的服务,在pomelo里每个server抽象为一个mailbox。先来看看mailbox的实现:

var MailBox = function(server, opts) {
   
    EventEmitter.call(this);

    this.curId = 1;
    this.id = server.id;
    this.host = server.host;
    this.port = server.port;
    this.protocal = server.protocal || 'http:';
    this.requests = {};
    this.timeout  = {};
    this.queue    = [];

    this.connected = false;
    this.closed = false;
    this.opts = opts;

    this.timeoutValue = 1000;
    this.buffMsg = opts.buffMsg;
    this.interval= 300;
};

util.inherits(MailBox, EventEmitter);

配置信息比较简单,相比服务端客户端多了一个超时的处理:

    var id = this.curId++;
    this.requests[id] = cb;
    setCbTimeout(this, id, cb);

    var pkg = {id: id, msg: msg};
    if(this.buffMsg) {
        enqueue(this, pkg);
    }
    else {
        this.socket.emit('message', pkg);
    }

curId可以理解为通信过程中的序列号,每次自增,唯一标示一个数据包,通常用来解决数据包的乱序问题。如果buffMsg被设置则启用缓冲队列,和服务端一致。在发送数据之前会开启一个定时器,如果超时则回调通知上层。


2. mailstation 消息路由

mailstation主要实现了几个功能:

  1. 客户端状态控制
  2. 远程服务端信息管理
  3. 过滤器
  4. 消息路由
1. 消息路由

消息路由模块采用延迟加载的方式,加给mailstation添加远程服务端配置信息的时候没有马上加载一个mailbox与之对应,而是在真正对该服务器请求服务的时候创建对应的实例:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值