}
void set_uuid(uint32_t id_) { uuid = id_; }
void set_msg_id(uint16_t id_) { msg_id = id_;}
void set_sgid(uint16_t sgid_) { service_group_id = sgid_;}
void set_sid(uint16_t sid_) { service_id = sid_; }
uint32_t uuid;
uint16_t service_group_id;
uint16_t service_id;
uint16_t msg_id;
string msg_name;
virtual string encode(uint16_t cmd_)
{
this->cmd = cmd_;
return encode();
}
virtual string encode() = 0;
bin_encoder_t& init_encoder()
{
return encoder.init(cmd) << uuid << service_group_id << service_id<< msg_id;
}
bin_encoder_t& init_encoder(uint16_t cmd_)
{
return encoder.init(cmd_) << uuid << service_group_id << service_id << msg_id;
bin_decoder_t& init_decoder(const string& buff_)
{
return decoder.init(buff_) >> uuid >> service_group_id >> service_id >> msg_id;
}
bin_decoder_t decoder;
bin_encoder_t encoder;
};
关于性能
由于远程接口的调用必须通过Broker, Broker会为每个接口自动生成性能统计数据,并每10分钟输出到perf.txt 文件中。文件格式为CSV,参见:
http://www.cnblogs.com/zhiranok/archive/2012/06/06/cpp_perf.html
总结
FFLIB框架拥有如下的特点:
●使用多进程并发。Broker 把Client 和Service 的位置透明化
●Service 的接口要注册到Broker, 所有连接Broker的Client 都可以调用(publisher/ subscriber)
●远程调用必须绑定回调函数
●利用future 模式实现同步,从而支持单元测试
●消息定义规范简单直接高效
●所有service的接口性能监控数据自动生成,免费的午餐
●Service 单线程话,更simplicity
源代码:
Svn co http://ffown.googlecode.com/svn/trunk/
运行示例:
●Cd example/broker && make && ./app_broker –l http://127.0.0.1:10241
●Cd example/echo_server && make && ./app_echo_server
●Cd example/echo_client && make && ./app_echo_client