【发布时间】:2020-02-09 00:55:26
【问题描述】:
我已经制作了简单的套接字通信。客户端使用 NodeJS V10.x 网络模块,很少看到 NodeJS 客户端被杀死而没有任何异常消息的有线症状。 客户端在 AWS Lambda 上运行,没有异常日志或任何失败消息。只是它已经消失了......
顺序是这样的
- 我的客户端连接到我的ECS服务器并成功发送命令数据。
- 服务器,如果它收到任何命令,它会向客户端发送ACK。当然是成功发送ACK了。
- 有时,客户端已经离开/杀死/停止,没有任何异常消息或登录 AWS 云手表失败。
我不知道如何追踪/修复它,请帮忙。
这是我将数据连接/发送/接收数据到服务器的功能代码,它也在 try...catch 中。
sendDirectCmd(directCmd){
return new Promise((resolve, reject)=>{
let socket = net.connect(port, hostname);
socket.setTimeout(10000); // 10 sec
socket.on('connect', async ()=>{
try{
log.info('[sendCmd] connected to ECS');
await socket.write(directCmd);
log.info('[sendCmd] Sent Cmd');
}catch(e){
e.message += `\n : (requester.sendCmd.socket.on) Failed to send Cmd \n`;
log.error('Error on connect\n', e);
reject(e);
socket.end();
}
});
socket.on('data', (data)=>{
resolve(data);
socket.end();
});
socket.on('timeout', ()=>{
reject(new Error(`socket Timeout `));
socket.end();
});
socket.on('error', (err)=>{
e.message += `\n : (requester.sendCmd.socket.error)socket Error `;
reject(err);
socket.end();
});
});
}
【问题讨论】:
-
您是否意识到
net.connect()不期望 URL,但您正在使用函数调用getGatewayUrl()来获取主机名。函数是刚刚命名错误还是真的返回了一个 URL? -
@jfriend00 getGatewayUrl() 函数会正确返回主机名(IP 地址),连接和发送数据没有问题。该问题仅在连接/发送数据后发生。
标签: node.js amazon-web-services aws-lambda