java.net.SocketTimeoutException:读取超时

2024-02-02

我有一个具有客户端服务器架构的应用程序。客户端 将 Java Web Start 与 Java Swing / AWT 结合使用,sert 使用 HTTP 服务器/Servlet 与 雄猫。 通信是通过对象的序列化进行的,创建一个 ObjectOutput 序列化字节数组并发送给服务器 分别调用ObjectInputStream并反序列化。

该应用程序遵循与某个特定的正确通信 开始显示错误的并发时间 “SocketException 读取超时”。当服务器调用该方法时发生错误 我的 servlet doPost 方法中的 ObjectInputStream.getObject() 。

tomcat 会变慢并且错误开始减少服务器响应时间,直到崩溃时间,我必须在一切正常后重新启动服务器。

有人经历过这个问题吗?

客户端代码

URLConnection conn =  url.openConnection();
conn.setDoOutput(true);

OutputStream os = conn.getOutputStream();
ObjectOutputStream oss = new ObjectOutputStream(os);

oss.writeUTF("protocol header sample");

oss.writeObject(_parameters);
oss.flush();
oss.close();

服务器代码

ObjectInputStream input = new ObjectInputStream(_request.getInputStream());
String method = input.readUTF();

parameters = input.readObject();

input.readObject() 是错误所在


您没有向我们提供太多信息,尤其是有关客户端的信息。但我怀疑客户端是:

  • 未能设置 Content-length 标头(或将其设置为错误的值),
  • 未能刷新输出流,和/或
  • 没有关闭插座的输出侧。

神秘。

根据您更新的问题,以上情况似乎都不是。以下是其他几种可能性:

  • 由于某种原因,客户端要么在序列化期间完全锁定,要么花费很长时间。
  • 客户端和服务器之间存在导致问题的代理。
  • 您遇到与负载相关的网络问题或网络硬件问题。

另一种可能的解释是内存泄漏,并且随着内存耗尽,GC 花费的时间越来越长,从而导致速度减慢。如果您启用了它们,这将显示在 GC 日志中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketTimeoutException:读取超时 的相关文章

随机推荐