在下面的代码示例中,我使用Play 2.2WSAPI连接到twitter流API。我被困在试图找出如何断开与流一旦建立。有什么正确的方法来代替停止应用程序吗?任何帮助都将不胜感激。
def watchTweets(keywords : String) = Action { implicit request =>
Logger.debug(s"watchTweets invoked with: $keywords")
val (tweetsOut, tweetChanel) = Concurrent.broadcast[JsValue]
WS.url(s"https://stream.twitter.com/1.1/statuses/filter.json?track=" + URLEncoder.encode(keywords, "UTF-8"))
.sign(OAuthCalculator(Twitter.KEY, Twitter.sessionTokenPair.get))
.postAndRetrieveStream("")(headers => Iteratee.foreach[Array[Byte]] { ba =>
val msg = new String(ba, "UTF-8")
Logger.debug(s"received message: $msg")
val tweet = Json.parse(msg)
tweetChanel.push(tweet)
}).flatMap(_.run)
Ok.chunked(tweetsOut &> Comet(callback = "parent.cometMessage")) }
发布于 2014-03-13 13:25:34
这是一个众所周知的问题..。答案是您关闭了连接,但问题是,枚举器在尝试向客户端提供一条tweet之前不会注意到连接已关闭,而这种情况在它收到来自Twitter的另一条Twitter消息之前不会发生,这可能需要很长时间才能实现。
在进行Twitter流时,这当然是个问题,因为Twitter一次只允许用户创建一个流,因此这实际上意味着在第一个流接收到一些数据之前,您无法执行第二个流。
不幸的是,我们还没有一个工作,但我们正在考虑引入一个新的更低级别的流媒体API发挥在2.4的时间线,这肯定会允许这一点。
https://stackoverflow.com/questions/22389866
复制相似问题