我有两台主机名为comp1
和comp2
的服务器。我还有一个浮动别名(master
),它动态映射到两个服务器之一。我从两个服务器提供相同的applet。客户端通常连接到master
,但完全允许直接连接到comp1
或comp2
。
客户端抱怨他们总是不得不等待applet加载(它相当大)。我认为,一旦客户端下载了必要的jar,它们就会被缓存,不会再次加载。起初我认为客户端的插件设置为不缓存,但我想我已经找到了问题的原因,虽然我不明白。
- 第一次连接客户端到
master
(当前指向comp1
)。必须等待jar下载。 - 重新连接
master
。我不需要等待jar下载。这也是期望/期望的行为。 - 连接客户端到
comp1
。必须等待jar下载。我宁愿不发生这种情况,因为它是同一个服务器,但我可以理解为什么,因为comp1
出现在客户端作为一个完全不同的主机。 - 将客户端连接回
master
。同样,我必须等待所有jar下载完毕。这不是我期望的。应该已经在步骤1/2中下载了jar文件。
使用Java控制面板,我可以看到缓存中的资源。在我看来,资源是按URL键,所以我不知道为什么我得到我所做的。似乎同一个服务器的两个不同的主机名弄乱了客户端的缓存。
我应该提到master
主机名不仅仅是一个DNS别名。它是一个实际的不同的IP地址,comp1/comp2
在应用程序运行时动态绑定/解除绑定。
你能解释一下我在这里看到的,或者建议一些调查的途径吗?
Avenus调查:
这很可能是jar文件名的结果-例如,如果它总是下载到%TMP%app.jar中,那么app.jar将在每次访问服务器时被践踏。
可能的解决方法:
- 在服务器上别名文件,因此它可以作为master.jar, compN.jar 获取
- 使用301或302提示浏览器只使用了一个源jar(由于同源策略,您可能需要对jar进行签名)