mysql连接池 顺序_mysql 连接池的正确写法

const mytools = require("./mytools");

const mynet = require('net');

const mysql = require('mysql')

// 使用 createPool 建立连接池

var mysqlpool = mysql.createPool({

host: '',

user: '',

password: '',

database: '',

port: ''

});

// 保存客户端

var g_clients = [];

//移除下线的客户端

function delete_client(temp_client_name) {

g_clients = g_clients.filter(cn => {

return cn != temp_client_name;

})

}

// 创建服务器

const server = new mynet.createServer();

server.on('connection', (client) => {

//局部客户端变量

let client_name = client.remoteAddress + ":" + client.remotePort;

g_clients.push(client_name);

//设置超时时间为60秒(单位毫秒)因为设备间隔3s发送一次数据

client.setTimeout(60 * 1000);

client.on('timeout', () => {

delete_client(client_name);

mytools.logger().info(`客户端${client_name}超时,从客户端列表中删除!`);

client.end();

});

client.on('data', function (msg) { //接收client发来的信息

mytools.logger().info(`收到${client_name}:`, msg);

if (!mytools.checkBuffer(msg)) {

mytools.logger().info(`校验错误,系统自动返回! ${client_name}:`, msg);

} else {

let t_request = new mytools.myRequest();

t_request.setBuffer(msg)

let t_msg = mytools.getResponse(msg);

mysqlpool.getConnection(function (err, connection) {

//if (err) mytools.logger().info('MySQL数据库建立连接失败。');

if (err) mytools.logger().info(err);

else {

mytools.logger().info('数据库建立连接成功。');

connection.query('INSERT INTO basetb (链路地址,请求帧,响应帧,状态,电流,电场,电压,信号强度) VALUES (?,?,?,?,?,?,?,?)', [t_request.getLianLuDiZhi(), t_request.to16String(), t_msg.toString("hex"), t_request.getStatus(), t_request.getDianLiu(), t_request.getDianChang(), t_request.getDianYa(), t_request.getXinHao()], function (err, data) {

if (err) mytools.logger().info('插入数据操作失败。');

else {

mytools.logger().info(data);

//连接释放很重要。但是不是有人写 mysqlpool.end(); 绝对错误

connection.release();

}

});

}

});

client.write(t_msg, () => {

logger().info(

`写入客户端${client_name}结束,响应值为:` + t_msg.toString('hex'));

});

}

});

client.on('error', function (e) { //监听客户端异常

mytools.logger().info('>>>>>>client error: ' + e);

delete_client(client_name);

client.end();

mytools.logger().info(`客户端${client_name}出错了!`);

mytools.logger().info('<<<<<

});

client.on('close', function () {

mytools.logger().info('>>>>>>client close!');

delete_client(client_name);

mytools.logger().info(`客户端${client_name}下线了!`);

mytools.logger().info('<<<<<

});

});

//这里的0.0.0.0非常重要,指定未ip4格式监听。

//127.0.0.1 localhost 上传到服务器,就无法连接(虽然本地是正常的)

server.listen(7500, '0.0.0.0', function () {

console.log(`服务器运行在:7500`);

});

//每隔10s刷新数据库

setInterval(() => {

//mytools.logger('oth').warn("当前客户端数量:", g_clients.length, "当前活动客户端列表:", g_clients);

}, 90000);

//链接终止指令,不要调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值