在游戏框架中关闭Twitter流连接



i在下面的代码示例中使用play 2.2 ws api连接到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")) }

这是一个已知的问题...答案是您关闭连接,但问题是,枚举者不会注意到连接在尝试喂食一个之前关闭了连接向客户发推文,直到它收到Twitter的另一条推文,这可能需要很长时间才能发生。

进行Twitter流时,这当然是一个问题>

不幸的是,我们尚未进行工作,但是我们正在考虑将新的下层流API引入2.4个时间线,这肯定会允许这一点。

最新更新