fdbus examples 分析-- fdb_test_server.cpp

[复制链接]
 楼主| keer_zu 发表于 2022-9-16 17:58 | 显示全部楼层 |阅读模式
fdbus examples 分析-- fdb_test_server.

0. overview
server 流程:
开启 fdbus context 线程
开启 worker 线程
创建servers 并且绑定地址
1. fdb_test_server.cpp 分析
1.1 开启 fdbus context 线程
代码
  1. /* start fdbus context thread */   
  2. FDB_CONTEXT->start();
 楼主| keer_zu 发表于 2022-9-16 17:59 | 显示全部楼层
具体分析
FDB_CONTEXT是宏定义,如下:
  1. // 定义在:`fdbus/public/common_base/CFdbContext.h`
  2. #define FDB_CONTEXT CFdbContext::getInstance()
  3. ...
  4. class CFdbContext : public CBaseWorker
  5. {
  6. };
 楼主| keer_zu 发表于 2022-9-16 18:00 | 显示全部楼层
CFdbContext‵ 是CBaseWorker` 的派生类
  1. // fdbus/public/common_base/CBaseWorker.h
  2. class CBaseWorker : public CBaseThread
  3. {
  4. };



CBaseWorker 是CBaseThread 的派生类
30477632449436fe93.png
 楼主| keer_zu 发表于 2022-9-16 18:01 | 显示全部楼层
1.2 开启 worker 线程
  1. static CBaseWorker main_worker;
  2. int main(int argc, char **argv)
  3. {
  4.     ...
  5.     CBaseWorker *worker_ptr = &main_worker;
  6.     /* start worker thread */
  7.     worker_ptr->start();
  8.     ...
  9. }
 楼主| keer_zu 发表于 2022-9-16 18:01 | 显示全部楼层
1.3 创建servers 并且绑定地址
代码片段
  1. /* create servers and bind the address: svc://service_name */        
  2. for (int i = 1; i < argc; ++i)                                       
  3. {                                                                    
  4.     std::string server_name = argv[i];                              
  5.     std::string url(FDB_URL_SVC);                                    
  6.     url += server_name;                                             
  7.     server_name += "_server";                                       
  8.     auto server = new CMediaServer(server_name.c_str(), worker_ptr);
  9.     server->enableWatchdog(true);                                    
  10.     server->enableUDP(true);                                         
  11.     server->bind(url.c_str());                                       
  12. }                                                                    
 楼主| keer_zu 发表于 2022-9-16 18:02 | 显示全部楼层
具体分析
传入的参数作为server 的名字;
FDB_URL_SVC 宏展开后是: svc://
server 地址的‵是: svc://service_name
server_name 是在传入的参数后追加_server
自己定义的具体 server 类继承CBaseServer, 构造函数以 name 和 CBaseWorker 指针作为参数
实例化具体的server类后,依次调用类成员函数: enableWatchdog(), enab leUDP, bind()
CBaseServer 的类继承关系:
9916632449a576434.png
 楼主| keer_zu 发表于 2022-9-16 18:02 | 显示全部楼层
1.4 main thread 转换为worker
  1. /* convert main thread into worker */            
  2. CBaseWorker background_worker;                  
  3. background_worker.start(FDB_WORKER_EXE_IN_PLACE);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1477

主题

12909

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部