我是node.js的新手,想要连接到TCP套接字.为此,我使用网络模块.
我的想法是将连接序列包装成一个函数然后在'close'事件上,尝试重新连接.显然不那么容易.
function conn() {
client.connect(HOST_PORT, HOST_IP, function() {
startSequence();
})
}
client.on('close', function(e) {
log('info','Connection closed! -> ' + e)
client.destroy();
setTimeout(conn(),1000);
});
Run Code Online (Sandbox Code Playgroud)
因此,当远程主机关闭时,我会看到我的日志正在通过,然而似乎正在发生的事情是,当远程主机上的安卓在线时所有先前的尝试都开始被处理 - 如果这是有意义的.如果你看一下client.connect,就会有一个名为startSequence的函数,它发送一些从远程服务器端"启动"连接的数据.当服务器脱机并且我开始重新连接之前所有失败的尝试似乎已被缓冲并且在服务器上线时全部一起发送.
我已尝试使用此Stackoverflow链接中的代码也无济于事(Nodejs - 让客户端套接字在5秒后超时再试一次)
client.connect(HOST_PORT, HOST_IP, function() {
pmsStartSequence();
})
// Add a 'close' event handler for the client socket
client.on('close', function(e) {
log('debug','connection closed -> ' + e)
client.setTimeout(10000, function() {
log('debug', 'trying to reconnect')
client.connect(HOST_PORT, HOST_IP, function() {
pmsStartSequence();
})
})
});
Run Code Online (Sandbox Code Playgroud)
有关如何在失败后重新连接套接字的建议吗?
我一直在尝试了解 NoSQL,我确实看到了在文档中嵌入数据的好处。
我无法理解并希望有人能澄清的是,如果必须是关系数据,如何存储数据。
例如。
我有很多用户。他们都在购买产品。因此,每次他们购买产品时,我们都会将其添加到 mongo 中的用户文档下,因此它是嵌入式的,而且一切都很棒。
我遇到的问题是当与该产品相关的某些内容发生变化时。
假设用户 A 购买了一辆名为“保时捷”的汽车。然后,我们在用户配置文件下添加一个引用。然而,在一个奇怪的事件转折中,保时捷被法拉利收购。
你现在做什么,更新每一条记录,把名字从保时捷改成法拉利?
通常在 SQL 中,我们会创建 3 个表。一种用于用户,一种用于汽车(描述、型号等),一种用于将用户映射到购买。
你对 Mongo 也做同样的事情吗?似乎如果你沿着这条路走下去,你是在试图让 Mongo 以 SQL 的方式做事,这不是它的本意。
我可以理解某些数据非常适合嵌入(地址、联系方式、评论等),但是当您需要引用可以并且需要定期更改的数据时会发生什么?
我希望这个问题很清楚