tcp服务器实现
const net = require('net');
const server = net.createServer();
const OPTION = {
SOCKET: {
port: 3000,
host: '192.168.1.110',
timeout:60000,
keepAliveTime:10000
}
}
let socketArr = [];
server.on('connection',(socket) => {
console.log(`socketConnect:${socket.remoteAddress}:${socket.remotePort}`);
socketArr.push(socket);
// socket.setEncoding('utf8');
socket.setTimeout(OPTION.timeout);
socket.setKeepAlive(true,OPTION.keepAliveTime);//keep net alive
socket.on('data', function(data) {
console.log(`DATA ${socket.remoteAddress}`);
// JSON.stringify(myObj);
});
socket.on('timeout',() => {
// sock.write('connect timeout,disconnecting,bye!');
// socket.end();
});
socket.on('close', function() {
let index = socketArr.indexOf(socket);
socketArr.splice(index,1);
console.log(`socketClose:${socket.remoteAddress}:${socket.remotePort}`);
});
socket.on('end', () => {
console.log('client disconnected');
});
socket.on('error',(err) => {
console.log(err);
});
});
server.on('error', (err) => {
console.log(err);
});
server.on('close',() => {
console.log('server closed!');
});
server.listen(OPTION.port, () => {
console(`socke server start! listen port ${OPTION.port}`);
});
exports.broadcast = (data) => {
try {
for (let v of socketArr) {
if (Buffer.isBuffer(data)) {
v.write(data);
}
}
} catch (err) {
}
};
tcp客户端
const net = require('net');
const client = new net.Socket();
const OPTION = {
timeout:500,
encoding:'utf8',
tcpOption:{
port:8080,
host:'192.168.1.121'
},
retriedTimes:0,
maxReTries:100,
retryInterval:1000
};
client.setTimeout(OPTION.timeout);
client.setEncoding(OPTION.encoding);
client.on('data', data => {
console.log('DATA: ' + data);
// client.destroy();// close connect
});
client.on('end',() => {
console.log('Client disnected');
});
client.on('close', () => {
infoLogger.warn('tcp connection closed');
reConnect()
});
client.on('error',err => {
// infoLogger.error(err);
});
client.on('timeout',() => {
});
function conncect() {
client.connect(OPTION.tcpOption,() => {
OPTION.retriedTimes = 0;
infoLogger.info(`tcp conncet success!--->local:${client.localAddress}:${client.localPort}=>remote:${client.remoteAddress}:${client.remotePort}`);
client.write('this is tcp client by Node.js');//服务器向客户端发送消息
});
}
//Reconnect server
function reConnect() {
if (OPTION.retriedTimes >= OPTION.maxReTries) {
console.log('Max retries have been exceeded,I give up.');
} else {
OPTION.retriedTimes += 1;
console.log(`connect:${OPTION.retriedTimes}`);
setTimeout(conncect,OPTION.retryInterval);
}
}
conncect();
module.exports = client;