2017-01-05 8 views
1

指定されたURLへの投稿リクエストを実行すると、Google App Engineのタイムアウトに問題があります。 hurl.itでテストリクエストを行うと、正常に動作します。ローカルサーバーでコードを実行すると、正常に動作します。私はそれをGoogle App Engineにデプロイしてオンラインでテストすると、どれくらいのタイムアウト制限を与えてもタイムアウトします(1分までテストされます)。私はそれがローカルではなくオンラインでバグアウトする原因を突き止めません。ここで私はそれがエラー出コードおよびスタックトレースです:オンラインでリクエストをタイムアウトすることはできますが、ローカルではありません。[Google App Engine]

package com.servlet.thing; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import javax.net.ssl.HttpsURLConnection; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@SuppressWarnings("serial") 
public class ServletThingServlet extends HttpServlet { 
private static final String PASS = "testpassword123"; 

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
    URL url = new URL("https://api.roblox.com/login/v1"); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    //URLConnection con = url.openConnection(); 
    con.setConnectTimeout(60000); 
    // Doesn't get past here online 
    resp.getWriter().println("connected"); 

    con.setDoOutput(true); 
    con.setRequestMethod("POST"); 
    resp.getWriter().println("checkpoint 1"); 

    OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream()); 
    writer.write("username=TestPromotionAcc&password=" + PASS); 
    writer.flush(); 
    writer.close(); 
    resp.getWriter().println("checkpoint 2"); 

    HashMap<String, List<String>> map = (HashMap<String, List<String>>) con.getHeaderFields(); 

    if (con.getResponseCode() == HttpURLConnection.HTTP_OK || con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) { 
     StringBuffer response = new StringBuffer(); 
     String line; 

     BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

     while ((line = reader.readLine()) != null) { 
      response.append(line); 
     } 

     System.out.println("--- HEADER FIELDS ---\n"); 

     for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
      if (entry.getKey().equalsIgnoreCase("set-cookie")) { 
       System.out.println("Value : " + entry.getValue()); 
       resp.getWriter().println("Set cookies: " + entry.getValue()); 
      } 
     } 

     reader.close(); 
     System.out.println(response.toString()); 
    } else { 
     resp.getWriter().println(con.getResponseCode() + ": " + con.getResponseMessage()); 
    } 
} 
} 

そして、ここでスタックトレースです:

サーブレット java.net.SocketTimeoutExceptionからキャッチされない例外は:タイムアウトURLをフェッチ中:http://api.roblox.com/login/v1 com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetchでcom.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:179) (URLFetchServiceImpl.java:45)com.googleで で。 apphosting.utils.security.urlfetch.URLFetchS erviceStreamHandler $ Connection.fetchResponse(URLFetchServiceStreamHandler.java:543) (com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler $ Connection.getInputStream(URLFetchServiceStreamHandler.java:422) 、com.google.apphosting.utils.security。 urlfetch.URLFetchServiceStreamHandler $ Connection.getResponseCode(URLFetchServiceStreamHandler.java:275) com.servlet.thing.ServletThingServlet.doGet(ServletThingServlet.java:30) (javax.servlet.http.HttpServlet.service(HttpServlet.java:617)) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166) でcom.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google。 apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) (com.google.apphosting.utils.servlet)。 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilterでorg.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) でJdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60) (TransactionCleanupFilter。 java:48) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(Se rvletHandler.java:1157)ORGでorg.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) でorg.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) で。 (org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle WebAppContext.java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) org.mortbay.jettyでcom.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailableでorg.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923) (RpcRequestParser.java:76) で) .HttpConnection.handle(HttpConnection。java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:145) at com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.run(JavaRuntime.java:511) at com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:446) at com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:453) at com.google.tracing.CurrentContext.runInContext COMでcom.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:304) で(CurrentContext.java:274)com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:312)で .google.tracing.TraceContext $ TraceContex tRunnable.run(TraceContext.java:450) com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:235) java.lang.Thread.run(Thread.java:745)

答えて

2

私の経験では、締め切りはローカルには適用されません。あなたの要求がexceeds 60 secondsの場合、タイムアウトが発生します。これを克服するために、私は物事を終わらせるためのより自由な10分の仕事で要求を包んでいたでしょう。その他のことを確認する - アプリケーションインスタンスを実行していますか、またはアプリケーションエンジンがopenConnectionを処理するために新しいインスタンスを起動する必要がありますか?

関連する問題