节点 js 传入的 tls 套接字在后台或服务中运行时关闭



我有一个节点js服务器.js我在EC2实例(ubuntu(上运行。此服务器打开与第三方流式处理 API 的 TLS 套接字连接。在前台执行时,它会按预期运行(即套接字连接并保持打开状态,接收数据或心跳(。

但是,我想在后台运行它,以便在我断开 shell 连接时它继续运行。我尝试运行以下命令,所有这些命令都运行脚本,接收套接字连接消息,并在 30 毫秒内立即关闭套接字 (.on('end'...((:

node server.js &
node server.js </dev/null
nohup node server.js &

我还尝试在 systemd 中将其设置为服务,以使用 systemctl start [服务] 运行。所有这些都会产生相同的结果。

我错过了什么?

TLS 代码片段:

const port = 443;
const hostname = 'third-party-host.com';
const tls = require('tls');
var body = '';
const options = {
host: hostname,
port: port
};
socket = tls.connect(options, () => {
logger.info('client connected',
socket.authorized ? 'authorized' : 'unauthorized');
process.stdin.pipe(socket);
process.stdin.resume();
})
.setEncoding('utf8')
var body = '';
socket.on('data', function(chunk) {
if (chunk.slice(-2) == "rn"){
body += chunk.toString();
logger.verbose(body);
...
body = '';
} else {
body += chunk.toString();
}
})
socket.on('end', function() {
logger.warn("Socket closed");
});

更新:

该问题是否与 process.stdin 在后台运行时不接受输入有关? 我发现的上一个问题

删除这两行为我解决了:

process.stdin.pipe(socket);
process.stdin.resume();

最新更新