node.js - 如何使用 socket.io 实时更新对象中的值
问题描述
我正在尝试使用 react、node 和 socketIO 创建一个股票交易模拟器,我需要将用户拥有的股票保存在这样的对象中:
var user = {
name: "patrick",
portfolio: [
{
ticker: "AAPL",
sharesOwned: 5,
currentPrice: {
ticker: "MSFT",
sharesOwned: 10,
currentPrice: "120.12"
}
}
]
}
问题是,我想CURRENT
实时显示用户拥有的股票列表以及市场价格。
我通过遍历用户在后端拥有的每只股票并调用 IEX API 来给我一个新价格并在永远循环中像这样更新 currentPrice 来实现这一点:
user.portfolio.currentPrice = await getStockPrice();
假设我创建了一个名为getStockPrice()
. 当然,循环将被包装在一个异步函数中以使用 await。
这样做确实会实时更新列表,但程序必须先循环遍历用户拥有的每只股票,然后返回具有更新价格的新投资组合,然后通过 socketIO 发送给客户端。这个过程每秒钟发生一次~3
,实时流由setInterval
后端的 a 处理,每 4 秒计时一次。
正确看待它,使用 MongoDB,我可以通过以下方式更改数据结构以存储项目:
var user = {
name: "patrick",
portfolio: {
aapl: { shares: 5, currentPrice: 2121 }
msft: { shares: 10, currentPrice: 24242 }
}
}
O(logn)
如果我没记错的话,在这里用 MongoDB 索引会给我。但是我仍然需要循环才能知道我想得到哪只股票的价格,它仍然是O(n)
.
所以总的来说,我认为这O(logn + n)
对于实时流媒体应用程序来说是非常糟糕的。
O(logn)
假设我们没有考虑 api 响应所需的时间,我如何使用 react 和 socket 来解决这个问题而不必循环并保持这个至少?
如果我的分析有误,请纠正我。
解决方案
推荐阅读
- vue.js - 如何让图像自动重新加载到 vue 组件中
- c++ - 来自 MSVC 外部“C”的故事
- visual-studio - Visual Studio 不会自动检测项目中的文件更改
- sql - Capturing percentage of occurence
- python-3.x - Matplotlib 动画未显示(梯度下降测试)
- c++ - 我可以毫无例外地将 std::accumulate 与易错操作一起使用吗?
- vb.net - 将单行 CSV 导入多行数据网格视图
- android - 在andorid上将多页PDF解析为多个位图
- docker - Artifactory rtBuildInfo 不会在 Jenkins docker 管道中收集环境变量
- android - 在 Firebase 测试实验室运行测试时如何禁用 google Smart Lock?