2015-06-14 68 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将确定是否需要打开连接或使用现有连接。