gpt4 book ai didi

c++ - 我可以在 nginx + spawn-fcgi 中保持 MySQL 连接永远打开吗?

转载 作者:行者123 更新时间:2023-11-28 07:05:56 26 4
gpt4 key购买 nike

我使用 nginx + fcgi,所以我们可以使用 spawn-cgi 运行的 c++ 应用程序。它就像一个守护进程。在那个 C++ 应用程序中,我们有主循环:

while ( FCGX_Accept_r( &request ) == 0 ) {

//....FCGX_Accept_r listens for all client requests so we process them here and return HTML output to web browser....

// Every such request I need to get some data from MySQL db.
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL *conn = mysql_init( NULL );

if ( !mysql_real_connect( conn, server.c_str(), user.c_str(), password.c_str(), database.c_str(), 0, NULL, 0 ) ) {
fprintf( stderr, "%s\n", mysql_error( conn ) );
//exit( 1 );
}

if ( mysql_query( conn, "show tables" ) ) {
fprintf( stderr, "%s\n", mysql_error( conn ) );
//exit( 1 );
}

res = mysql_use_result( conn );
while ( ( row = mysql_fetch_row( res ) ) != NULL ) {
std::cout << row[ 0 ] << "<br>\n";
}

mysql_free_result( res );
mysql_close( conn );

}

我是否需要在每次请求时都启动和关闭连接,还是在 while 循环之前打开连接并在 while 循环之后关闭连接会更好?

最佳答案

在请求时保持连接打开实际上是一个相当不错的主意,因为它会节省每次建立新连接的开销!但是,您需要确保:

  • 如果连接断开(在请求期间或请求之间),您需要重新打开它。

  • 如果您的代码执行改变连接状态的操作,例如启动事务,您需要确保在请求之间正确重置。

关于c++ - 我可以在 nginx + spawn-fcgi 中保持 MySQL 连接永远打开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21763885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com