2013-04-26 2 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

    관련 문제