我使用节点服务器从binance获取交易数据。有一千多对需要进行交易。该功能需要时间才能完全运行。我需要的功能,以重新启动,每当它完成运行,使我不断获得新的数据,而我的服务器是活的和运行。但是,在我的服务器运行10-15分钟后,会发生以下错误:
我想让服务器在后台永久运行,并让这个函数继续从API获取交易,并将这些交易存储在我的数据库中。我定义了另一个GET
方法,然后从我的数据库中获取交易。我试图永久运行的功能位于我的主服务器中。js文件:
const getTrades = async () => {
let page = 1;
let coins = [];
const results = await db.query("SELECT * FROM pairs;");
const pairs = results.rows;
const latest = await db.query("SELECT MAX(trade_time) FROM trades");
const latestTrade = latest.rows[0].max;
while (page < 55) {
gecko = await axios(
`https://api.coingecko.com/api/v3/coins/markets?vs_currency=USD&order=market_cap_desc&per_page=250&page=${page}`
);
coins.push(gecko.data);
page++;
}
console.log("Loop over");
coins = coins.flat();
for (const pair of pairs) {
let biggestTrade = [];
response = await axios.get(
`https://api.binance.com/api/v3/trades?symbol=${pair.pair}`
);
let filtered = response.data;
filtered = filtered.filter((trade) => trade.time > latestTrade);
let sells = filtered.filter((trade) => trade.isBuyerMaker === true);
let buys = filtered.filter((trade) => trade.isBuyerMaker === false);
if (sells.length > 0) {
biggestTrade.push(
sells.reduce(function (prev, current) {
return prev.quoteQty > current.quoteQty ? prev : current;
})
);
}
if (buys.length > 0) {
biggestTrade.push(
buys.reduce(function (prev, current) {
return prev.quoteQty > current.quoteQty ? prev : current;
})
);
}
biggestTrade = biggestTrade.flat();
for (const trade of biggestTrade) {
let priceUSD = 0;
let baseAssetIcon = "";
for (const coin of coins) {
if (coin.symbol.toUpperCase() === pair.quote_asset) {
priceUSD = coin.current_price;
}
if (coin.symbol.toUpperCase() === pair.base_asset) {
baseAssetIcon = coin.image;
}
if (priceUSD > 0 && baseAssetIcon.length > 0) {
break;
}
}
if (trade.quoteQty * priceUSD > 50000) {
const results = db.query(
"INSERT INTO trades (exchange_name, exchange_icon_url, trade_time, price_in_quote_asset,price_in_usd, trade_value, base_asset_icon, qty, quoteQty, is_buyer_maker, pair, base_asset_trade, quote_asset_trade) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12, $13)",
[
"Binance",
"https://assets.coingecko.com/markets/images/52/small/binance.jpg?1519353250",
trade.time,
trade.price,
priceUSD,
trade.quoteQty * priceUSD,
baseAssetIcon,
trade.qty,
trade.quoteQty,
trade.isBuyerMaker,
pair.pair,
pair.base_asset,
pair.quote_asset,
]
);
console.log("Trade Added");
}
}
}
console.log("PAIRS ARE OVER");
};
如何使函数在指定时间段后重复运行,服务器不中断。
如果连续多次调用外部第三方API,而调用之间没有间隔,则要求断开连接,因为API的安全策略将阻止此类客户端。想象一下,如果整个世界在一台服务器上同时建立55个连接。服务器肯定会崩溃。
我在你的代码中看到你一次打55个电话。我建议你在每次通话之间延迟一段时间。
const delay = time => new Promise(res => setTimeout(res,time));
await delay(1000); // 1 second delay
还有其他优化可以防止axios中的连接问题,例如共享httpAgent:
import http from "http"
import https from "https"
import axios from "axios"
const httpAgent = new http.Agent({ keepAlive: true })
const httpsAgent = new https.Agent({ keepAlive: true })
const api = axios.create({
baseURL: "http://google.com",
httpAgent,
httpsAgent,
})
//now you will reuse the axios instance:
while(page < 55) {
await delay(500);
gecko = await api(
`https://api.coingecko.com/api/v3/coins/markets?vs_currency=USD&order=market_cap_desc&per_page=250&page=${page}`
);
}
我试图在集群故障切换期间测试我的软件行为,因此我想配置一个最简单的集群:一个主集群和两个从集群。我有以下内容的树文件7000.conf-7002.conf: cluster.conf的内容: 然后我配置了7000运行从0到16383的所有插槽,7001和7002是7000的副本: 然后我尝试通过命令或杀死进程来摆脱7000。其中一个奴隶应该提升自己为主人,但没有人这样做: 我已经等了几分钟了,我的
问题内容: 我刚刚重新安装了Apache服务器2.2。一切正常。当我进入本地主机时,我得到:“有效!” 我刚刚安装了mySQL5.5,当我转到localhost:3306时,我变得很乱: J 5.5.22 ‘ 4[LM {D〜p ÿ÷! € 6[I = 4 / +,9z {| mysql_native_password。! #08S01Got数据包出现故障 我在互联网上看到很多用户遇到类似问题的帖
问题内容: 我认为我非常接近让Java服务器应用程序通过WebRTC与浏览器页面对话,但是我不能完全使其正常工作。我感觉自己缺少一些小东西,因此希望这里有人可以提出建议。 我仔细研究了WebRTC示例- Java单元测试()和示例Android应用()。根据所学知识,我编写了一个Java应用程序,该应用程序使用WebSockets进行信号传输并尝试将视频流发送到Chrome。 问题是,即使我所有的
您是否知道是否有任何方法可以从MainActivity启动服务,发送一些数据,并在服务完成后从服务获取数据。例如: 此外,如果这是不可能的,您建议采用什么替代方案,其中MainActivity可以访问来自DataFromInternetService的数据。班 注意:我不想使用LoaderManager,我使用服务来执行不会影响UI的后台任务。
问题内容: 我的一台Redis服务器今天反复停机,没有任何明显的可诊断原因。我所有的用户最终都会遇到错误。 查看处的日志,最后几行捕获的内容比计划的备份更为有害: pid文件仍然存在。这意味着服务器没有被正式关闭,redis仍被守护? 我登录到系统,并做了两次以使其启动并运行。除了这些日志,我还能如何诊断可能出了什么问题? 更新:我注意到在第一次崩溃时,磁盘交换开始发生。这从未发生过。此外,确认将
我再问一次。希望有经历过同样问题的人能给我一些帮助。背景:使用ReactApp构建一个从瑞典语到英语的翻译应用程序。问题:使用axios访问打开的URL时。获取( https://dictapi.lexicala.com/test,我可以获取数据,但如果替换为