Java 如何在Google App Engine中检测HTTP响应大小

Java 如何在Google App Engine中检测HTTP响应大小,java,google-app-engine,servlets,httpresponse,gae-quotas,Java,Google App Engine,Servlets,Httpresponse,Gae Quotas,我正在用Java为Google app Engine编写一个应用程序。某个servlet生成的响应可能超过32MB的限制。在开发服务器上,这似乎不会导致任何问题。在生产服务器上,我需要一种将响应拆分为多个请求的方法 我想知道当超过限制时,生产服务器上会发生什么。当超过限制时,PrintWriter是否抛出IOException?还是只有在servlet终止时才会引发异常?理想情况下,我希望能够在追加每个部分之前计算总响应大小(我自己不计算字节,因为我不知道HTTP头的大小),这样我就可以正确地清

我正在用Java为Google app Engine编写一个应用程序。某个servlet生成的响应可能超过32MB的限制。在开发服务器上,这似乎不会导致任何问题。在生产服务器上,我需要一种将响应拆分为多个请求的方法


我想知道当超过限制时,生产服务器上会发生什么。当超过限制时,
PrintWriter
是否抛出
IOException
?还是只有在servlet终止时才会引发异常?理想情况下,我希望能够在追加每个部分之前计算总响应大小(我自己不计算字节,因为我不知道HTTP头的大小),这样我就可以正确地清理响应的结尾(即追加“}”以完成JSON对象)。还是有更好的方法来处理这种情况?

尼克说得对,当前的响应大小限制是32MB

应用引擎缓冲响应数据,所以在代码运行完成之前它不会看到您的响应,所以它不能引发异常或以其他方式发出代码可以捕获的错误信号。相反,它向客户端返回一个500,主体如下:

HTTP响应太大:340000134。上限为:33554432

您可以通过在以下位置运行此命令来尝试:


print'x'*34*1000*1000

最近,App Engine上HTTP请求和响应的限制已提高到32MB。在此之前,在相当长的一段时间内,它是10MB的。文档说32MB用于请求,10MB用于响应。虽然超过这个限制的可能性不大,但肯定还是有可能的。所以我认为这个问题仍然有效,“我自己不计算字节,因为我不知道HTTP头的大小”。好吧,标题不会那么大,如果你允许25K,你应该是安全的。很抱歉,文档在这方面已经过时了-请参阅发行说明:。你在哪里读到10MB的?@Nick Johnson:看看这本书的最底层。我想这已经过时了。有什么办法吗?例如,在
app.yaml
中使用自定义运行时?我正在开发一个流媒体应用程序,它可以将大于32MB的文件下载到客户端,并且需要GCE来支持流媒体大文件。目前看来,GCE(1)缓冲响应数据,(2)可能有32MB的限制(使用
运行时:ruby
)。