我使用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循环之后关闭连接?
答案 0 :(得分:1)
在请求上打开连接实际上是一个相当不错的主意,因为它将节省每次建立新连接的开销!但是,您需要确保:
如果断开连接(在请求期间或请求之间),您需要重新打开它。
如果您的代码执行的操作会改变连接状态,例如启动事务,则需要确保在请求之间正确重置。