使用Comet和Play Framework检测连接关闭

时间:2016-01-14 21:29:20

标签: playframework playframework-2.0 comet

我使用icm下面的函数iframe运行一个非常长的进程(系统查找重复记录,它只是一个读取操作)。

但是,如果用户拥有他们需要的记录并离开页面,则该过程将继续。有没有办法在发生这种情况时检测并终止该过程?

我希望调用public void onDisconnected(F.Callback0 callback0),但情况似乎并非如此。

public static Result findDuplicatesActor(){
    Comet comet = new Comet("parent.cometMessage") {
      public void onConnected() {
          int totalRecords = User.find.findRowCount();
          int processed = 0;
          int progress;
          for(User user : User.find.all()){
              progress = Math.round(((float) processed / (float) totalRecords * 100));                 
              sendMessage("{\"progress\":" + progress + ",\"result\":\"OK\"}");
              Logger.info("Progress on duplicate search: " + progress);
              processed++;
          }

          sendMessage("{\"progress\":100,\"result\":\"OK\"}");
          close();
      }

        @Override
        public void close() {
            Logger.info("Connection closed!");
            super.close();
        }

        @Override
        public void onDisconnected(F.Callback0 callback0) {
            Logger.info("Connection disconnected!");
            super.onDisconnected(callback0);
        }
    };

    return ok(comet);
}

0 个答案:

没有答案