2013-04-26 65 views
0

在帶有socket.io和node-mysql模塊的應用程序中,觸發事件時使用mysql連接的最佳方式(最優化和設計良好)是什麼?Socket.io&Mysql:多少個連接?

  1. 每次調用回調

一次創建一個連接,並把它傳遞給回調

  • 創建連接讓我們寫一些代碼來更好地解釋

    案例1

    var connection = mysql.createConnection({ 
        host  : 'example.org', 
        user  : 'bob', 
        password : 'secret', 
    }); 
    
    io.sockets.on('connection', function cb1(){ 
        socket.on('event', function cb2(){ 
         connection.connect(function cb3(){ 
          connection.query(); 
         }); 
        }); 
    }); 
    

    案例2

    io.sockets.on('connection', function cb1(){ 
        socket.on('event', function cb2(){ 
         var connection = mysql.createConnection({ 
          host  : 'example.org', 
          user  : 'bob', 
          password : 'secret', 
         }); 
         connection.connect(function cb3(){ 
          connection.query(); 
         }); 
        }); 
    }); 
    

    我的服務器偵聽幾個套接字事件,並且遇到很多超時錯誤!我認爲這可能與使用連接有關。

    有什麼建議嗎?

  • 回答

    0

    我認爲最好的辦法是打開一個連接,並在socket.io事件中運行查詢。像這樣:

    var connection = mysql.createConnection({ 
    host  : 'example.org', 
    user  : 'bob', 
    password : 'secret', 
    }); 
    connection.connect(function cb3(){ 
        io.sockets.on('connection', function cb1(){ 
        socket.on('event', function cb2(){ 
          connection.query(); 
         }); 
        }); 
    }); 
    
    0

    我會看連接池,其中is implemented by node-mysql。這具有可以使用多個連接到數據庫的優勢,同時保持連接總數受到限制,以防止數據庫服務器氾濫。

    另一種可能性可能是node-mysql-queues,它可以用來防止多個查詢通過單個連接運行時可能出現的問題。

    +0

    我首先開始使用連接池,但在某些情況下很難使用。你不得不使用回調來使用連接,這給我帶來了很多問題,特別是因爲我的服務器有兩個setInterval總是在後臺運行。連接打開並關閉每個滴答! 此外,我總是得到一個「無法解決的ETIMEDOUT」錯誤,很多人都在抱怨! – dorexx45 2013-04-30 11:20:16