feat: DB 커넥션 풀 기능 추가
TODO: 동시에 여러 DB 연결 확인해야함. 현재 기능만 확인 완료
This commit is contained in:
parent
31b4763bc3
commit
4d60403adf
2 changed files with 133 additions and 93 deletions
|
|
@ -39,18 +39,38 @@ public:
|
|||
boost::asio::awaitable<RankingResult> GetRanking(int type,
|
||||
std::string nickname);
|
||||
|
||||
// 내부용 객체
|
||||
class PooledConnection {
|
||||
public:
|
||||
PooledConnection(DatabaseManager &manager,
|
||||
std::unique_ptr<boost::mysql::tcp_ssl_connection> conn);
|
||||
~PooledConnection();
|
||||
|
||||
boost::mysql::tcp_ssl_connection &Get();
|
||||
boost::mysql::tcp_ssl_connection *operator->();
|
||||
|
||||
private:
|
||||
DatabaseManager &manager_;
|
||||
std::unique_ptr<boost::mysql::tcp_ssl_connection> conn_;
|
||||
};
|
||||
|
||||
boost::asio::awaitable<std::unique_ptr<PooledConnection>> GetConnection();
|
||||
|
||||
private:
|
||||
DatabaseManager() = default;
|
||||
void ReturnConnection(std::unique_ptr<boost::mysql::tcp_ssl_connection> conn);
|
||||
|
||||
// 비동기 Mutex 역할을 할 함수들
|
||||
boost::asio::awaitable<void> Lock();
|
||||
void Unlock();
|
||||
// DB 접속 정보 저장용 (새로운 커넥션 생성 시 필요)
|
||||
std::string host_, user_, password_, db_;
|
||||
uint16_t port_;
|
||||
|
||||
std::unique_ptr<boost::mysql::tcp_ssl_connection> conn_;
|
||||
std::unique_ptr<boost::asio::strand<boost::asio::io_context::executor_type>>
|
||||
strand_;
|
||||
|
||||
// 비동기 락 시스템을 위한 상태 변수
|
||||
bool is_locked_ = false;
|
||||
// 풀 상태 관리
|
||||
std::vector<std::unique_ptr<boost::mysql::tcp_ssl_connection>>
|
||||
available_conns_;
|
||||
std::queue<std::shared_ptr<boost::asio::steady_timer>> waiting_queue_;
|
||||
const uint16_t max_pool_size_ = 10;
|
||||
int16_t current_total_conns_ = 0;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue