- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的 node-js 应用程序使用 bitfinex-api-node npm 包建立 websocket 连接以从 Bitfinex 加密货币交易所接收数据。
不幸的是,几个小时后连接悄无声息地中断,应用程序停止通过 websocket 接收数据。这似乎是一个已知问题,可能是 bitfinex-api-module 的错误。
现在,我试图通过首先连接 websocket 并订阅一些蜡烛数据来“手动”重新连接。然后调用 websocket.close() 函数来模拟运行时的连接错误。在 on close 函数中,我设置了另一个超时并尝试创建一个新的 BFX() 对象并 open() 它但是 .on(open) 永远不会被调用。
=> 我一定是做错了什么。我的逻辑有错误吗?有没有更好的重新连接方法?
以下代码有效,只需复制粘贴并运行即可。我非常感谢任何提示或提示。
const BFX = require('bitfinex-api-node');
//websocket
const opts = {
manageCandles: true,
transform: true,
API_KEY: 'hidden',
API_SECRET: 'hidden',
ws: {
autoReconnect: true,
seqAudit: true,
packetWDDelay: 10 * 1000
}
};
var websocket = new BFX().ws(2, opts);
websocket.on('open', () => {
//websocket.auth.bind(websocket)
console.log('.on(open) called');
websocket.subscribeCandles('trade:5m:tBTCUSD')
});
websocket.on('close', ()=>{
console.log('.on(close) called');
setTimeout(function() {
websocket = new BFX().ws(2, opts);
websocket.open();
}, 10000);
});
websocket.onCandle({key: 'trade:5m:tBTCUSD'},(candles) => {
console.log(candles[0]);
})
websocket.open();
// this closes the connection after 20 seconds
//after start for debugging purposes:
setTimeout(function() {
websocket.close();
}, 10000);
最佳答案
问题是当前一个关闭时,您没有将任何监听器附加到新的 websocket 实例:
websocket.on('close', ()=>{
console.log('.on(close) called');
setTimeout(function() {
// this creates a new instance without listeners
websocket = new BFX().ws(2, opts);
websocket.open();
}, 10000);
});
当你第一次初始化 websocket 时,你添加它们:
websocket.on('open', /* code */);
websocket.onCandle(/* code */);
为了解决这个问题,我建议编写一个函数来创建和配置一个新的 websocket 实例:
function createWebsocket() {
const websocket = new BFX().ws(2, opts);
websocket.on('open', /* code */);
websocket.onCandle(/* code */);
websocket.open();
}
并在 on('close')
中调用它:
websocket.on('close', ()=>{
console.log('.on(close) called');
setTimeout(createWebsocket, 10000);
});
关于javascript - Node : Not receiving events after websocket reconnect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932483/
当我尝试连接到已关闭的主机时,我收到以下消息: cd `sftp://example.com/tmp' [Delaying before reconnect: 30] 每次尝试后,延迟都会增加。我发现
最近我注意到 mysql 连接超时,增加 wait_timeout 对此有所帮助。然而这种情况仍然发生。 我们还启用了 mysqli.reconnect 来 try catch 问题并允许脚本继续运行
我正在编写一个应用程序,它使用 TIdTCPClient 通过套接字与另一个应用程序进行通信。 我希望应用程序尝试连接到某个服务器,直到建立连接(即直到服务器上线)。 为了做到这一点,我编写了以下代码
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
为了解释,我将代码分为几个子部分:(相同范围) 在第 1、2 和 3 部分,任何连接数据库的尝试都会成功。值得一提的是,每个 mysql_close() 都会立即由退出继续。 在第 4 部分,尝试连
如何防止通过重新连接切换连接编码?我的所有设置都是 utf-8,但是因为我在 cli 的 php.ini 中启用了这个功能......我已经测试了任何东西......当我有一个长时间工作的脚本时,然后
Mongoose 'reconnected' 事件在 'close' 事件第二次被触发后不会触发。如何增加始终重试的时间? close:在我们断开连接并在所有这些连接模型上执行 onClose(之后,
我是这方面的新手,我在 Azure ML 工作区中遇到了一些问题。我从终端运行了 python 代码,然后打开另一个终端来检查进程。我在检查进程的终端中收到以下消息: 这是什么意思?它一直在运行,但我
我在 node.js (Express) 应用程序中使用 Javascript SDK。 连接用户工作正常,但连接不会在页面重新加载之间持续存在。这是默认行为,还是用户应该在新请求中保持联系? 我是否
我在 node.js (Express) 应用程序中使用 Javascript SDK。 连接用户工作正常,但连接不会在页面重新加载之间持续存在。这是默认行为,还是用户应该在新请求中保持联系? 我是否
如果我先启动服务器,然后启动客户端,一切都会正常,但是当我先启动客户端,然后启动服务器时(确保客户端能够在 svr 崩溃时连接,然后再次上线),客户端确实连接到服务器,但 2.3 秒后它抛出 Sock
如果连接丢失,如何设置 asterisk 服务器重新连接到远程 MySQL 服务器?带有 odbc 支持的 Asterisk 1.8.32.3 最佳答案 Asterisk 有 cdr 和实时连接。两者
我是 iOS 新手,刚开始使用它。我正在尝试实现网络可达性以检测网络何时断开连接以及何时通过使用第三方类恢复。我能够检测到网络丢失,但我无法检测到网络断开连接后何时恢复。我正在使用以下条件来检查工作正
我不自动加载数据库,因为我的应用程序的大多数页面不需要需要数据库处理,否则整个过程会变慢。我想要做的是在已经存在一个连接时不建立与 db 的新连接,而是使用它而不是打扰 server-db。那么我如何
我在客户端有以下代码: socket.on('reconnect', function() { alert("Reconnected!"); }); 文档说: 事件:“重新连接”成功重新连接后
在脚本运行一定时间后,我在 Ruby 中遇到“mysql 已消失”错误。 我想尝试告诉 mysql gem 在连接丢失时自动重新连接。 我当前的代码如下所示: def self.connect()
我正在尝试使用 retrievePeripheralsWithIdentifiers: 方法尝试连接到之前连接的外围设备。只有当外围设备在 iOS 设备附近时,连接尝试才会成功。 现在,我如何确定已知
ZooKeeper FAQ告诉 ZooKeeper 对象必须在状态变为 SESSION_EXPIRED 时重新创建。 是否有任何代码示例可以正确执行此类重新连接? zookeeper 发行版中的 re
我的 node-js 应用程序使用 bitfinex-api-node npm 包建立 websocket 连接以从 Bitfinex 加密货币交易所接收数据。 不幸的是,几个小时后连接悄无声息地中断
我正在开发一个多数据库系统。系统会集成客户端本地的mssql服务器。 我会将凭证信息存储在我的主数据库中。我想将一些表迁移到我的客户本地数据库。 如您所知,我们可以选择如下连接。 Schema::co
我是一名优秀的程序员,十分优秀!