1

在带有 socket.io 和 node-mysql 模块的应用程序中,触发事件时使用 mysql 连接的最佳方式(最优化和设计良好)是什么?

  1. 创建一个连接并将其传递给回调
  2. 每次调用回调时创建一个连接

让我们写一些代码来更好地解释

情况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();
        });
    });
});

我的服务器监听了几个套接字事件,我遇到了很多超时错误!我认为这可能与连接的使用有关。

有什么建议么?

4

2 回答 2

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();
        });
    });
});
于 2013-04-28T07:52:45.947 回答
0

我会看看连接池,它是由 node-mysql 实现的。这样做的好处是能够使用多个连接到您的数据库,同时限制连接总数以防止数据库服务器泛滥。

另一种可能性可能是node-mysql-queues,它可用于防止通过单个连接运行多个查询时可能出现的问题。

于 2013-04-28T09:18:25.817 回答