Socket.io mysql连接错误

Posted

技术标签:

【中文标题】Socket.io mysql连接错误【英文标题】:Socket.io mysql connection error 【发布时间】:2017-01-08 07:07:57 【问题描述】:

当我在 npm 上启动我的套接字时,我的 mysql 连接将下降大约 30 秒。我不知道为什么。 mysql 插入方法有效。但是当我等待大约 1 分钟 -30 秒时,连接关闭。

这是错误代码;

events.js:141 投掷者; // 未处理的“错误”事件 ^

错误:连接丢失:服务器关闭了连接。 在 Protocol.end (C:\xampp\htdocs\tem\node_modules\mysql\lib\protocol\Protocol.js:109:13) 在套接字。 (C:\xampp\htdocs\tem\node_modules\mysql\lib\Connection.js:115:28) 在 emitNone (events.js:72:20) 在 Socket.emit (events.js:166:7) 在 endReadableNT (_stream_readable.js:921:12) 在 nextTickCallbackWith2Args (node.js:442:9) 在 process._tickCallback (node.js:356:17)

这是我的源代码;

var app = require('express')();
var mysql = require("mysql");
var http=require('http').Server(app);
var io=require('socket.io')(http);
var con = mysql.createConnection(
    host: "hostname",
    user: "username",
    password: "pw",
    database: "db"
);
con.connect(function(err)
    if(err)
        console.log('UnSuccesfull');
        return;
    
    console.log('Succesfull');
);
app.get("/",function(req,res)

    res.sendfile(__dirname+"/asd.html");

);
io.on('connection',function(socket)

    var UserLog=
        Log:'A User Connected'
    ;
    con.query('Insert Into Log SET ?',UserLog ,function(err)
        if(err)
            console.log(err);
    );
);
var port=xx;
http.listen(port,'xx.xx.xx');

【问题讨论】:

尝试续集docs.sequelizejs.com/en/v3 【参考方案1】:

我向你推荐,使用连接池。

你可以这样创建连接池;

var pool  = mysql.createPool(
connectionLimit : 60,
host    : hostname,
user    : dbUser,
password: dbPass,
database: dbName,
multipleStatements: true
);

当你需要在mysql上运行查询时;

pool.getConnection(function(err, connection) 
            connection.query( "SELECT * FROM `users`", function(err, users) 
                connection.release();
            );
        );

【讨论】:

Hocam 4 saniyede bir mysql boş sorgu yapsam SELECT X FROM Y diye sıkıntı cıkar mı ? aynı mantık olsa gerek @MuhammedAlmaz sıkıntı çıkartacağını sanmıyorum, ayrıca limit 1 diyerek biraz daha az yük bindirmiş olursun. Tamamdır hocam o şekilde yapayım :) eyvallah【参考方案2】:

io.on('connect')*

数据库规则是否正确?

【讨论】:

if(err) throw err;

以上是关于Socket.io mysql连接错误的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 错误 - Web 套接字连接在建立连接之前关闭

socket.io 错误 - Web 套接字连接在建立连接之前关闭

断开连接/错误时清除 socket.io 缓冲区

Heroku 和 Socket.io,400 个错误请求和许多断开连接

连接 socket.io 时由于 xhr poll 错误而出现 connect_error

Socket.io断开事件错误地为其他用户触发,然后再次连接