我有一个vib-d程序,它被用作链接的代理。我使用mysql本机连接到SQL。它是有效的,但在流量更高的情况下,服务在20到20分钟后就会失效。除了core.exception.AssertError之外,我没有看到任何特定的错误。这让我思考,如果我把一切都安排好了。我没有找到任何关于如何设置这样一个项目的例子。
这是我的应用程序的一个非常简化的版本。这是在Vibe-d项目中连接MySQL的正确方式吗?我在Proxyd类中创建了一个mysql池,然后通过lockConnection在每个操作中打开新的连接。
void main()
{
Proxyd proxy = new Proxyd(dbConfig);
auto settings = new HTTPServerSettings;
HTTPListener http_listener = listenHTTP(settings, proxy.getRouter());
runApplication();
}
class Proxyd
{
URLRouter router;
MySQLPool db_pool;
public:
this(Node dbConfig)
{
router = new URLRouter;
router.get("/link", &link);
db_pool = new MySQLPool(host,username,password,database,port);
}
private:
void link(HTTPServerRequest request, HTTPServerResponse response)
{
db = db_pool.lockConnection();
ResultRange rows = db.query("..")
}
}
我不确定,但可能是因为vibe.core.connectionpool无法在工作线程之间共享。https://github.com/vibe-d/vibe-core/blob/f19401bfbe3d689b8ff7d50a9aafdf9f52887083/source/vibe/core/connectionpool.d#L74
这将是工作。
MySQLPool pool; // per threads, on TLS.
static this() {
pool = new MySQLPool(...);