OceanBase的网络框架

OceanBase的网络框架代码如下:

class ObSingleServer
{
public:
  //设置工作线程个数
  int set_thread_count(const int thread_count);
  //设置网络I/O线程个数
  int set_io_thread_count(const int io_thread_count);
  //设置监听端口
  int set_listen_port(const int listen_port);

public:
   //处理接收到的网络包,默认的处理逻辑是将网络包加入到全局任务队列中
  virtual int handlePacket(ObPacket* packet);
  // 工作线程每次从全局任务中抽取一个网络包并调用该函数进行处理
  virtual do_request(ObPacket* packet);
};

OceanBase服务端接收客户端发送的网络包(ObPacket),并交给handlePacket处理函数进行处理。默认情况下,handlePacket会将网络包加入到全局任务队列中。接着,工作线程会从全局任务队列中不断获取网络包,并调用do_requst进行处理,处理完成后应答客户端。可以分别通过set_tread_count以及set_io_thread_count函数来设置工作线程以及网络线程的个数。

客户端使用ObCilentManager发送网络包:

class ObCilentManager
{
public:
  //异步发送请求包
  //@param [in] server 服务器端地址
  //@param [in] pcode 请求包的类型(packet code)
  //@param [in] version 请求包的版本
  //@param [in] in_buffer 请求包实际内容缓冲区
  int post_request(const ObServer& server, const int32_t pcode, const int32_t version, const ObDataBuffer& in_buffer) const;
  //同步发送请求包并等待应答
  //@param [in] server 服务器端地址
  //@param [in] pcode 请求包的类型(packet code)
  //@param [in] version 请求包的版本
  //@param [in] timeout 请求时间
  //@param [in] in_buffer 请求包实际内容缓冲区
  //@param [out] out_buffer 应答包的实际内容缓冲区
  int post_request(const ObServer& server, const int32_t pcode, const int32_t version, const int64_t timeout, ObDataBuffer& in_buffer, ObDataBuffer& out_buffer) const;
}:

客户端发包分为两种情况:异步请求(post_request)以及同步请求(send_request)。异步请求时,客户端将请求包加入到网络发送队列后立即返回,不等待应答。同步请求是,客户端将请求包加入到网络发送队列后开始阻塞等待,直到网络线程接收到服务端的应答包后才唤醒客户端,从而执行后续处理逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值