W Google App App Engine użyłem następujące wiersze czytać stronę z witryny:Limit czasu aplikacji Google App Engine?
String Url="http://...",line,Result="";
URL url=new URL(Url+"?r="+System.currentTimeMillis());
BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));
while ((line=reader.readLine())!=null) { Result+=line+"\n"; }
reader.close();
Ale mam następujący błąd:
Uncaught exception from servlet
com.google.apphosting.api.DeadlineExceededException: This request (f5e2889605d27d42) started at 2011/09/07 03:20:41.458 UTC and was still executing at 2011/09/07 03:21:30.888 UTC.
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:276)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:82)
at com.google.appengine.tools.development.TimedFuture.get(TimedFuture.java:55)
at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:177)
at com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:56)
at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:150)
at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:148)
at java.security.AccessController.doPrivileged(Native Method)
Wygląda to trwało dłużej niż chciałaby czekać, co mogę zrobić, jeśli strona jest wolna?
Jest to limit czasu żądania, który następuje po 30 sekundach. Ponieważ żądania URLFetch są ograniczone do 10 sekund, musisz robić więcej niż tylko jedno połączenie. Co robisz? –
Tak, otrzymywałem zawartość strony z 6 kategorii i widziałem, gdzie mój NMJava jest w rankingu, więc trwało to dłużej, ponieważ przechodzi przez każdą stronę, aby znaleźć nazwę NMJava i oblicza, gdzie stoi ponad wszystko. – Frank
Czy rozważałeś użycie asynchronicznego narzędzia URLFetch? To pozwoli ci wykonywać wszystkie żądania równolegle. –