gpt4 book ai didi

mysql - 节点 + Mysql + Socket IO + PROTOCOL_CONNECTION_LOST

转载 作者:行者123 更新时间:2023-11-29 17:22:11 25 4
gpt4 key购买 nike

版本:

节点JS:7.2.1

express :4.15.3

MySQL NPM:2.14.1

套接字IO:2.1.1

我们刚刚在应用程序中引入了套接字,试图让通知运行。但从那时起,我的数据库就无法连接。

我不断收到PROTOCOL_CONNECTION_LOST:连接丢失:服务器关闭了连接。错误。我已经尝试过thisthis 。它们似乎不起作用。

第一次没有建立连接,但是如果我在错误事件上设置Interval并尝试在一段时间后重新连接,它确实会连接..但是新的连接对象不被使用..

我切换了我的分支..连接工作完美。还有其他团队成员同时工作,他们的连接没有任何问题。所以我猜这与我实现通知的方式有关。

下面是我的文件:

//socket.js

import server from './../../server.js';
import SocketIO from "socket.io";
import nconf from "nconf";
import eventService from "../../events/service.js";

module.exports.initSocket = (IO) => {
let event = eventService(IO);
let notificationEmissionInterval = nconf.get('NOTIFICATION_INTERVAL_MILLISECONDS');

IO.on("connection", (socket) => {
setInterval(() => {
event.emitNotifications(socket);
}, notificationEmissionInterval);
});
};

if (server) {
let IO = new SocketIO(server);
module.exports.initSocket(IO);
}

//service.js

import path from 'path';
import logger from '../config/lib/logger.js';
import notificationController from "../module/notification/controller/notification.controller.js";

module.exports = (IO) => {
let emitNotifications = (socket) => {
notificationController.getUnreadNotifications(params)
.then((notifications) => {
//Do something
)
};

return {
emitNotifications: emitNotifications,
}
};

//Model.js

import connection from '../../../config/lib/db.js';
import logger from 'logger';
import Promise from 'bluebird';

class NotificationModel {

getUnreadNotifications = () => {
return new Promise((resolve, reject) => {
let query = `CALL GetUnreadNotification()`;
connection.query(query, (err, result) => {
if (err) {
logger.error('Sql error in NotificationModel.getUnreadNotifications : ', err);
reject(err);
}
else {
logger.info('Unread notifications fetched successfully');
resolve(result);
}
});
});
};

}
export default new NotificationModel();

我的数据库文件当前[经过大量调试]如下所示。在通知模型的导入中注释掉该文件可以解决该错误。

//db.js

import mysql from 'mysql';
import nconf from 'nconf';
import logger from './logger.js';
import path from 'path';

nconf.argv()
.env()
.file({
file: path.resolve('./config.json')
});

let dbConfig = {
"host": nconf.get('MYSQL_HOST'),
"port": nconf.get('MYSQL_PORT'),
"user": nconf.get('MYSQL_USER'),
"password": nconf.get('MYSQL_PASSWORD'),
"database": nconf.get('MYSQL_DATABASE'),
"stringifyObjects":true,
"multipleStatements": true,
"dateStrings" : 'DATETIME',
"connectTimeout" : 60000
};

function connectToDatabase() {
logger.info('Trying to connect to the database');
let _conn = mysql.createConnection(dbConfig);

_conn.connect((err) => {
if (err) {
logger.error('Error connecting to the database');
logger.debug(err.code + ' : ' + err.message);
setTimeout(connectToDatabase, 3000);
}
else {
logger.info('Connected to the database via threadId : ' + _conn.threadId);
return _conn;
}
});

_conn.on('error', (err) => {
logger.error('Error connecting to the database');
logger.debug(err.code + ' : ' + err.message);
setTimeout(connectToDatabase, 3000);
});
}

let connection = connectToDatabase();

export default connection;

感谢任何帮助。

最佳答案

回答我自己的问题..我使用连接池解决了它..

//db.js

let pool = mysql.createPool(dbConfig);

pool.on('connection', function (_conn) {
if (_conn) {
logger.info('Connected the database via threadId %d!!', _conn.threadId);
_conn.query('SET SESSION auto_increment_increment=1');
}
});

关于mysql - 节点 + Mysql + Socket IO + PROTOCOL_CONNECTION_LOST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com