2014-02-16 4 views
1

Я сейчас работаю над твиттер-приложением, используя twitter4j. В основном я разрешаю пользователям создавать учетные записи, добавлять свои личные ключевые слова и запускать собственный поток.Глобальные переменные в структуре воспроизведения/Отслеживание открытых потоков

Я стараюсь играть как можно лучше с twitter api. Избегайте ограничений скорости, не подключайте одну и ту же учетную запись снова и снова. То, что мне кажется нужным сделать, это иметь какой-то объект, содержащий список всех активных объектов TwitterStream, но я не знаю, как подойти к этому , Это контроллер для запуска потока.

public static Result startStream(){ 
    ObjectNode result = Json.newObject(); 
    if (
     //openStreams is a Map<Long,TwitterStream> in the TwitterListener class 
     TwitterListener.openStreams.containsKey(Long.parseLong(session().get("id"))) 
     ){ 
      result.put("status", "running"); 
      return ok(result); 
    } 
    Cache.set("twitterStream", TwitterListener.listener(
      Person.find.byId(
        Long.parseLong(session().get("id")) 
        ) 
       ) 
      ); 
    result.put("status", "OK"); 
    return ok(result);   
} 

Как вы можете видеть, что я ставлю их в кэш прямо сейчас, но я хотел бы держать потоки открытыми в течение длительного периода времени, так что кэш не будет достаточно.

  • Что является наиболее подходящим способом структурирования моего приложения для этой цели?

  • Должен ли я использовать Akka?

  • Как я могу реализовать глобальный объект Play для этого?

ответ

3

Как только вы начинаете думать о введении глобального состояния в вашем приложении, вы должны спросить себя, есть ли вероятность того, что я мог бы масштабироваться до нескольких узлов, или иметь несколько узлов для целей избыточность? Если есть хоть малейшая вероятность, что ответ да, то вы должны использовать Akka, потому что Akka позволит вам легко адаптировать ваш код для работы в многоузловой среде с кластерами Akka, просто вводя последовательный хеширующий маршрутизатор. Если вы не используете Akka, тогда вам практически придется перепроектировать ваше приложение, когда будет требоваться наличие нескольких узлов.

Итак, я собираюсь предположить, что вы хотите в будущем подтвердить свое приложение и объяснить, как использовать Akka (Akka - хороший способ управления глобальным состоянием, даже если вам не нужны несколько узлов).

Итак, в Акке вы хотите, чтобы актер, управляющий потоком, будет отвечать за создание субъектов потока, если они еще не существуют как дети сами по себе. Тогда участники потока будут нести ответственность за обработку потока, отправку потока подписчикам и отслеживание того, сколько соединений подписано на них, и закрытие, когда абонентов больше нет.

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