ClickHouse源码阅读条记(一)之主要流程
入口main函数在dbms/programs/main.cpp
int main(int argc_, char ** argv_)
{
…
/// Print a basic help if nothing was matched
MainFunc main_func = printHelp;//这里凭据启动时传入的参数来确定后面执行哪个func,对于server来说,对应的函数为mainEntryClickHouseServer
for (auto & application : clickhouse_applications)
{
if (isClickhouseApp(application.first, argv))
{
main_func = application.second;
break;
}
}
return main_func(static_cast(argv.size()), argv.data());//对于server,这里挪用mainEntryClickHouseServer后,转到dbms/programs/server/server.cpp
}
在dbms/programs/server/server.cpp中,提供三类接口,根据源码的形貌,说明如下:
/** Server provides three interfaces:
* 1. HTTP – simple interface for any applications.
适用于任何应用程序的HTTP接口。