繁体   English   中英

Google App Engine-http请求/响应

[英]Google App Engine - http request/response

我在Google App Engine(GAE)上托管了一个Java Web应用程序。 用户单击一个按钮,他将获得一个包含100行的数据表。 在页面底部,有一个“进行Web服务调用”按钮。 单击该按钮,该应用程序将一次执行一行,并使用URLConnection类进行第三方Web服务调用。 那部分工作正常。

但是,由于HttpRequest / Response周期有60秒的限制,所以由于超时发生在第50行左右,所以所有100个事务都不会通过。

如何创建循环并发送Web服务调用,而用户不必多次单击“进行Web服务调用”?

有没有一种方法可以在60秒之前停止循环,然后在不提交HttpResponse的情况下重新开始? (我不想使用异步Google后端)。

此外,GAE是否支持文件上传(从文件而不是数据库中获取100行)

谢谢。

根据注释添加一些代码:

URL url = new URL(urlString);

HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setDoOutput(true);
                connection.setRequestMethod("POST");
                connection.setConnectTimeout(35000);
                connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
                connection.setRequestProperty("Authorization", encodedCredentials);

                // Send post request
                DataOutputStream wr = new DataOutputStream(
                        connection.getOutputStream());
                wr.writeBytes(submitRequest);

这完全取决于这些调用的结果会发生什么。

如果结果没有返回到UI,则无需阻止它。 您可以使用Tasks API创建100个任务,并将响应返回给用户。 此过程最多需要几秒钟。 另一个好处是,通过使用任务,您最多可以并行进行10个呼叫。

如果必须将结果返回给用户,您仍然可以使用多达10个线程来并行处理尽可能多的请求。 希望可以将您的时间缩短到1分钟以内,但您不能保证此时间,因为您依赖当前可能无法使用的第三方资源的响应。 您将必须实现自己的重试机制。

另请注意,用户不习惯于等待几分钟才能让网站做出响应。 当在处理上一个请求之后通知用户而不阻止您的客户端代码时,您可以考虑采用其他方法。

是的,您可以从App Engine上的文件加载数据。

尝试使用异步urlfetch调用:

LinkedList<Future<HttpResponse>> futures;

// Start all the request
for (Url url : urls) {
    HttpRequest request = new HttpRequest(url, HTTPMethod.POST);
    request.setPayload(...)
    futures.add(urlfetchservice.fetchAsync(request);
}

// Collect all the results
for (Future<HttpResponse> future : futures) {
    HttpResponse response = future.get()
    // Do something with future
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM