mysql - node-mysql 池和 socket.io

标签 mysql node.js socket.io

我目前正在为我的应用程序上的所有用户使用单个 mysql 连接。 我想开始使用一个池(它应该更优化,对吧?)但我有一个“结构”问题:createPool 方法只适用于回调,我不明白如何通过与 socket.io 事件的连接。

我的意思是,在 server.js 文件中有一个建立连接的点

pool.getConnection(function(err, connection) {
    //I'm supposed to use the connection here
}

然后有一个点是套接字事件被“捕获”

io.sockets.on('connection', function(socket){
    socket.on('userLogin', function(id_user){
        //I need the connection here to run a query with 'id_user'!
    });
});

在第二点我需要连接然后我可以运行

connection.query('SELECT bla bla bla...', function(err, data){
    connection.end();
});

我认为这是为每个连接到应用程序的用户建立不同连接的唯一方法,但我真的不明白如何将连接“传递”到 socket.io“空间”。

最佳答案

在需要时向池请求连接:

var pool = mysql.createPool(...);

io.sockets.on('connection', function(socket) {

  socket.on('userLogin', function(id_user) {
    pool.getConnection(function(err, connection) {
      // assuming err was null here...
      connection.query(..., function(err, data) {
        // return the connection to the pool as soon as possible
        connection.end();

        // process data
        ...
      });
    });
  });
});

由于池化,pool.getConnection() 是一个非常便宜的调用,因此当您按需调用它时不会产生太大影响。

关于mysql - node-mysql 池和 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16321641/

相关文章:

node.js - 在生产环境中运行 NodeJS 服务器

node.js - 用户角色 : node. js express sequelize react.js

javascript - Express 4 ans Socket.io - 在模块中访问 app.io

node.js - websocket 无法在 ec2 上与 nginx 连接

Python 的子进程删除 Mysql 列和间距

php - 无法使用 mysqli_query 执行查询

java - 将 Java 应用程序绑定(bind)到 Cloud Foundry 中的 MySQL

c# - 使用 SQL 在 C# 中使用 Combobox

node.js - 使用 Router 通过 Express 庆祝 Joi 验证

javascript - socket.io 可以处理多少事件?