虽然发送重 json 几乎 5MB 它会给我 java.net.SocketException: Connection reset by peer: socket write error

Posted

技术标签:

【中文标题】虽然发送重 json 几乎 5MB 它会给我 java.net.SocketException: Connection reset by peer: socket write error【英文标题】:While sending heavy json almost 5MB it will give me java.net.SocketException: Connection reset by peer: socket write error 【发布时间】:2017-09-24 01:53:49 【问题描述】:

想发布一个巨大的 JSON 对象,但是当我尝试时出现此错误:

java.net.SocketException: Connection reset by peer: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)
 at java.net.SocketOutputStream.socketWrite(Unknown Source)
 at java.net.SocketOutputStream.write(Unknown Source)
 at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:126)
 at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:162)
 at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:115)
 at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:122)
 at org.apache.http.entity.StringEntity.writeTo(StringEntity.java:169)
 at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:158)
 at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:162)
 at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
 at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:122)
 at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
 at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
 at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
 at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
 at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
 at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
 at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
 at com.os.util.helper.microServiceHelper.AbstractMicroServiceHelper.getResultFromMicroServices(AbstractMicroServiceHelper.java:196)
 at com.os.util.helper.microServiceHelper.IsheetVersionMicroserviceImpl.bulkInsertUpdateIsheetVersion(IsheetVersionMicroserviceImpl.java:75)
 at com.os.gfnactions.isheet.IsheetVersionPutInMicroserviceThread.run(IsheetVersionPutInMicroserviceThread.java:36)
 at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
 at java.util.concurrent.FutureTask.run(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)

套接字异常

当我通过 HttpClient Post 请求发送一个大而重的 json 时,它会给我一个以下错误。

所以如何解决以下错误我正在研究所有发布的问题。但没有为我的错误找到合适的解决方案。

仅供参考:基本上我们在服务器端使用 spring boot api。我们从 java 中的应用程序调用该 api。

你能请任何人帮我解决以下错误吗??

1) 如何在java中从客户端发送?

2) 如何在java中获取服务器端的json?

【问题讨论】:

我认为发布大文本不是个好主意。我建议你应该拆分这个 json 并为此应用一些分页。 您是否尝试增加超时时间? @lukassz 你有没有其他方法不拆分 json,因为我们已经将 json 拆分为小 json 实际上原始 json 大小几乎是 50 MB。 @pvpkiran 我们从不使用超时。如何使用超时??? .它是如何工作的?? 正如@lukassz 所说,发送大文件不是一个好主意。但是您仍然可以检查它以增加超时。 ***.com/questions/3000214/…可以设置不同类型的超时时间 【参考方案1】:

您应该尝试通过键入socket.setSoTimeout(number) 来增加套接字超时

文档:https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setSoTimeout(int)

发布巨大的文字不是一个好主意。您应该为此应用一些分页并拆分,例如。每 200kb。

对于大型 json 文件,我推荐 BSON http://bsonspec.org/

【讨论】:

【参考方案2】:

它可能发生的原因之一是由于 tomcat 服务器上的请求大小限制。在这种情况下,您将需要增加 How to set the max size of upload file

中提到的

【讨论】:

以上是关于虽然发送重 json 几乎 5MB 它会给我 java.net.SocketException: Connection reset by peer: socket write error的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 从 angular.js 发送到 node.js

它会给我啥以及如何访问这些元素?

在Swift中使用Realm进行过滤,给我一个对象数组,但是当打印一个属性时,它会给我一个空字符串

Bash 重命名扩展递归

当我在 ngOnInit() 中使用 router.getCurrentNavigation() 时,它会给我类型错误,但是当我在构造函数中使用它时,它工作正常,为啥?

当我运行迁移时,uuid 字段总是在更新,它会给我一些性能问题,任何人都可以向我解释原因和解决方案