【发布时间】:2020-05-08 00:27:42
【问题描述】:
我正在使用 Twitter API 在 Firebase Cloud Functions 中流式传输和处理推文。
在我的信息流中,我正在跟踪 Twitter 的各种关键字和用户,因此推文的涌入非常高,甚至在我处理上一条推文之前就发送了一条新推文,这会导致失效,因为新推文有时会这样做没有得到处理。
这就是我的流的样子:
...
const stream = twitter.stream('statuses/filter', {track: [various, keywords, ..., ...], follow: [userId1, userId2, userId3, userId3, ..., ...]});
stream.on('tweet', (tweet) => {
processTweet(tweet); //This takes time because there are multiple network requests involved and also sometimes recursively running functions depending on the tweets properties.
})
...
processTweet(tweet) 本质上是从 twitter 编译线程,这需要时间取决于线程的长度。有时也几秒钟。我已尽可能优化processTweet(tweet) 以可靠地编译线程。
我想并行运行processTweet(tweet) 并将处理时传入的推文排队,以便它像推特文档specify. 一样可靠地运行
确保您的客户端读取流的速度足够快。通常,您在读取流时不应该做任何真正的处理工作。读取流并将活动交给另一个线程/进程/数据存储以异步进行处理。
非常感谢您的帮助。
【问题讨论】:
-
您的
processTweet的代码是相关的。通常,当您进行网络/API 请求时,您会使用带有 Promises 和回调的异步函数。
标签: javascript firebase twitter google-cloud-functions