这是服务器套接字的源代码:
const server = net.createServer(client => {
// 'connection' listener.
let processing = false;
client.setTimeout(config.socket.timeout);
client.on('data', data => {
const batches = data.toString().split(',');
if (!processing && batches && batches.length) {
processing = true;
processBatch(batches, error => {
const status = error ? 'ERR' : 'SUCC';
logger.verbose('... Ended with status : ' + status);
client.write(status, () => client.end());
});
}
});
client.on('timeout', () => {
logger.warn('Client socket did time out');
client.end();
});
//client.on('end', () => {});
});
server.on('error', error => {
logger.info('Socket error');
logger.error('Error: ', error);
});
server.listen(config.socket.port, () => {
console.log('*** Socket listening on port', config.socket.port);
});
客户端将进行连接,发送数据,然后远程关闭连接,这将触发服务器错误处理程序,并记录以下消息:
Error: This socket has been ended by the other party
at Socket.writeAfterFIN [as write] (net.js:441:14)
at file:///home/thermo/bwkl/src/service.js:191:20
at file:///home/thermo/bwkl/src/service.js:123:13 {
code: 'EPIPE'
}
当远程主机过早终止连接时,如何防止这种情况并优雅地关闭客户端套接字?
在server
因为错误事件被发出错误处理程序不赶连接错误client
。
您应该为实例error
上的事件定义一个侦听器client
,以便处理所涉及的错误:
client.on('error', (err) => {
console.log('Connection error:', err.message);
});
这将防止Node.js进程崩溃。您可以在侦听器中根据需要处理错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句