2015-06-14 135 views
0

我使用civetweb作爲(websocket)服務器。當我收到數據時,我有一些處理程序,它將查詢mysql。這些會在每次請求時產生一個線程。如何實現連接池?

到現在爲止,我只是在數據庫中使用了一個mysql連接,我在程序的開始安裝了這個連接,並結合了mongoose庫。但是對於線程請求,這會讓我很頭疼,因爲從執行mysql_select()到mysql_store_result()之前,mysql不是線程安全的。我曾嘗試在這些mysql函數週圍添加一個互斥量,但隨後perfomce會降低十倍(從〜750個請求/秒到〜75個請求/秒)。

處理這個問題的正確方法是什麼?我聽說過一個'連接池',但很難找到一些簡單的谷歌示例(或者將我的頭圍繞一個理智的實現)。

似乎不太可能我是第一個遇到這樣的問題的人:)。

回答

0

我不確定這是否會對您有所幫助。我會把它放在評論中,但我還沒有足夠的聲望。

當我在應用程序中添加多線程時,我在VB.NET中遇到了同樣的問題。爲了糾正它,我確保在所有查詢之前調用connection.open並添加「pooling = true;」到我的MySQL連接字符串的末尾。 Mysql將確定是否需要打開連接或使用現有連接。