Trong một ứng dụng Google App Engine tôi đã sử dụng những dòng sau để đọc một trang từ một trang web:Google App Engine hết giờ?
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();
Nhưng tôi đã nhận lỗi sau:
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)
Có vẻ nó mất nhiều thời gian hơn nó muốn chờ đợi, tôi có thể làm gì nếu trang web đó chậm?
Đây là thời gian chờ yêu cầu, sẽ diễn ra sau 30 giây. Vì yêu cầu URLFetch được giới hạn trong 10 giây, bạn phải làm nhiều hơn chỉ một cuộc gọi này. Bạn đang làm gì đấy? –
Có, tôi đã nhận được nội dung trang từ 6 danh mục và xem nơi NMJava của tôi được xếp hạng, vì vậy phải mất nhiều thời gian hơn khi nó đi qua từng trang để tìm tên NMJava và tính toán nơi nó đứng trên tất cả. – Frank
Bạn có cân nhắc sử dụng URLFetch không đồng bộ không? Điều đó sẽ cho phép bạn thực hiện tất cả các yêu cầu song song. –