node.js - 如何在 Node.js 中关闭 tls 套接字连接?
问题描述
我在 node.js 下面编写了代码来打开具有指定端口和主机的 TLS 连接。
var tls = require('tls');
(() => {
var output = {};
const client = tls.connect({
port: 5060,
host: "173.99.99.99",
}, () => {
console.log('connected to server!');
var cert = client.getPeerCertificate(true);
console.log("Connection success!!!");
});
client.setTimeout(1000);
client.on('timeout',()=>{
console.log("Requested timed out!");
client.end();
})
client.on('data', (data) => {
console.log("Data::",data);
client.end();
});
client.on('error', (err) => {
console.log('Error',err);
client.end();
});
client.on('end', (op) => {
client.destroy();
console.log('disconnected from server',op);
});
})();
并获得如下所示的输出。
Requested timed out!
disconnected from server undefined
Error { Error: socket hang up
at TLSSocket.onConnectEnd (_tls_wrap.js:1083:19)
at Object.onceWrapper (events.js:272:13)
at TLSSocket.emit (events.js:185:15)
at endReadableNT (_stream_readable.js:1106:12)
at process._tickCallback (internal/process/next_tick.js:178:19)
code: 'ECONNRESET',
path: undefined,
host: '173.99.99.99',
port: 5060,
localAddress: undefined }
期望是,首先它执行timeout
然后end
事件。但error
事件也触发了。
如何确保代码不会触发end
和error
事件 on timeout
.
解决方案
我修复了套接字挂起问题,如下所示。
let client = net.createConnection({
port: "Port",
host: "Hostname"
}, () => {
//Connection is Success. Do your stuff here!!
client.destroy();
});
client.setTimeout(5000);
client.on('timeout', (data) => {
// Connection timed-out.
client.destroy()
});
client.on('error', (err) => {
// Something went wrong while opening.
});
我正在销毁客户端,因为在打开连接 5 秒后,它会引发超时,之后代码将执行错误块。
推荐阅读
- java - 动态更新查询mybatis mapper
- android - Flutter 冻结系统(ubuntu)
- java - 了解 DataBinding 的生命周期
- mysql - 无法在我的 buffalo 应用程序中写入 mySQL db 或从中读取
- unit-testing - 是否可以将用户输入保存在变量中以使用intellij(pycharm)连续测试
- ada - Ada 阐述根本没有发生
- java - 切换字符串的第一个和最后一个字母
- excel - Excel基于相邻列的动态数据校验
- python - 如何使用 send_mail 制作 Django 与我联系表格?
- php - Wordpress 插件无法识别所需文件