同时连接时数据库连接中断(Crystal-lang)

时间:2017-10-24 21:16:33

标签: mysql crystal-lang

我用这个类属性设置了一个类:

@@db : DB::Database = DB.open "mysql://root:root@localhost/db_name"

然后,在任何类方法中,我都可以使用@@db

@@db.query("select * from thing") do |rs|
    rs.each do
        # make object
    end
end

我希望通过这种方式我只能在应用程序启动时DB.open,而不是每次请求。这很有效......直到我运行wrk -c10并同时测试多个连接。以下是一些错误反馈:

  

HTTP :: Handler封闭流上的未处理异常(IO ::错误)   0x10e69a440:*加注:NoReturn at ?? 0x10e6a8d57:   * IO :: FileDescriptor + @ IO :: Buffered #read:Int32 at ?? 0x10e7030db:* MySql :: ReadPacket #read:Int32 at ??   0x10e74d89b:* DB :: ResultSet + @ DB :: Disposable #close :( Bool | Nil)at ??   0x10e745ba2:* DefaultController :: database:无   在 ?? 0x10e7500c4:   * HTTP :: Server :: RequestProcessor #process<(OpenSSL :: SSL :: Socket :: Server | TCPSocket +),(OpenSSL :: SSL :: Socket :: Server | TCPSocket +),   IO :: FileDescriptor>:Nil at ?? 0x10e6995fd:   * Fiber#run:(IO :: FileDescriptor | Nil)at ??

我通过对每个请求执行此操作来“解决”问题:

DB.open("mysql://root:root@localhost/db_name") do |db|
    db.query("select * from thing") do |rs|
        rs.each do
            # make object
        end
    end
end

这很有效,但表现糟糕。我做错了什么?

0 个答案:

没有答案