2014-03-13 5 views
0

Я подключаюсь к твиттер-потоковому API с помощью API версии 2.2 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")) } 

ответ

1

Это известная проблема ... ответ, что вы закрыть соединение, но проблема в том, переписчик не заметит, что соединение будет закрыто до тех пор, пока не пытается кормить твит к клиент, и этого не произойдет, пока он не получит еще один твит из Twitter, что может занять много времени.

Это, конечно, проблема при чтении твиттера, потому что Twitter будет позволять пользователю создавать только один поток за раз, поэтому это означает, что вы не можете делать второй поток, пока первый не получит некоторые данные.

К сожалению, пока у нас нет работы, но мы планируем внедрить новый API потоковой передачи более низкого уровня в Play вокруг 2,4-временной линии, что, безусловно, позволит это.

+0

Так как же оно обрабатывается в 2.4? – sam

+1

Не разрешено в 2.4. Но в 2.5 (в процессе) мы переключились на потоки Akka, что обеспечивает способ асинхронной отправки отмены вверх по течению. –

+0

Я заметил, что на этот раз класс WC расширяет замкнутый интерфейс :), поэтому должно быть легко косоваться, что действительно – sam

Смежные вопросы