我有一个客户端服务器架构的应用程序。客户端使用Java Web Start和Java Swing / AWT,而服务端使用HTTP服务器/Servlet和Tomcat。
通信是通过对象序列化实现的,创建ObjectOutput序列化字节数组并发送到服务器,分别调用ObjectInputStream进行反序列化。
该应用程序在某个并发时间内正确通信,但随着时间的推移,开始显示错误“SocketException read timeout”。当服务器在我的servlet doPost方法中调用ObjectInputStream.getObject()方法时,发生了错误。
Tomcat会变慢,并且错误会导致服务器响应时间减少,直到崩溃时我必须重新启动服务器,然后一切正常。
有人遇到过这个问题吗?
客户端代码
通信是通过对象序列化实现的,创建ObjectOutput序列化字节数组并发送到服务器,分别调用ObjectInputStream进行反序列化。
该应用程序在某个并发时间内正确通信,但随着时间的推移,开始显示错误“SocketException read timeout”。当服务器在我的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() 是出现错误的地方。