我们有一个Webstart客户端,它通过使用HTTPS通过HTTPS发送序列化对象来与服务器通信java.net.HttpsURLConnection。
在本地计算机和办公室中的测试服务器上,一切都可以正常工作,但是我遇到了一个非常非常奇怪的问题,该问题仅在生产和登台服务器上出现(偶尔发生)。我知道这些服务器与我们办公室中的服务器之间的主要区别在于它们位于其他位置,并且与它们之间的客户端-
服务器通信速度相当慢,但在此之前的生产中也能正常工作很长时间。
无论如何,这是正在发生的事情:
请注意,这不是一个SocketTimeoutException,如果超时在可以建立连接之前超时,该connect()方法将HttpURLConnection表示抛出该异常。另外,发生这种情况时,我可以打电话给conn.getResponseCode()我,并获得200的响应码。
在服务器端,EOFException会在ObjectInputStream的构造函数中抛出an ,该构造函数尝试读取序列化标头,但由于客户端始终OutputStream无法写入而失败。
如果有帮助,这里是在调用HttpsURLConnection之前进行的调用getOutputStream()(经过编辑以仅显示正在进行的调用,而不是执行此操作的整个代码结构):
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setReadTimeout(30000);
conn.setRequestProperty("Cookie", cookie);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-java-serialized-object");
conn.getOutputStream();
关键是,我不知道这是怎么发生的,特别是考虑到它只是 偶尔 发生(我无法说出明确的活动模式),甚至只有在客户端和客户端之间(相对)高延迟时才发生服务器。
鉴于到目前为止我已经找到了什么java.net.ConnectException: Connect timed
out,我想知道这是否不是我们的服务器正在运行的网络上的某些网络或防火墙问题…但是鉴于请求,这对我来说没有多大意义显然已经到达了servlet。此外,在同一网络上运行的其他应用程序也未报告类似问题。
有谁知道这可能是什么原因,甚至我应该调查什么?