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)。异步请求时,客户端将请求包加入到网络发送队列后立即返回,不等待应答。同步请求是,客户端将请求包加入到网络发送队列后开始阻塞等待,直到网络线程接收到服务端的应答包后才唤醒客户端,从而执行后续处理逻辑。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/467894

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。