#java #applet
#java #апплет
Вопрос:
У меня есть два сервера с именами хостов comp1
и comp2
. У меня также есть плавающий псевдоним ( master
), который динамически отображается на один из двух серверов. Я обслуживаю один и тот же идентичный апплет с обоих серверов. Клиенты обычно подключаются к master
одному, но вполне допустимо подключаться к любому из них comp1
или comp2
напрямую.
Клиенты жалуются, что им всегда приходится ждать загрузки апплета (он довольно большой). Я думал, что как только клиент загрузит необходимые jar-файлы, они будут кэшированы и не будут загружены снова. Сначала я подумал, что клиентский плагин настроен на не кэширование, но я думаю, что нашел причину проблемы, хотя и не понимаю ее.
- Впервые подключите клиент к
master
(на который в данный момент указываетcomp1
). Необходимо дождаться загрузки jars. Это ожидаемо. - Снова подключите клиент к
master
. Мне не нужно ждать загрузки jars. Это также ожидаемое / желаемое поведение. - Подключите клиент к
comp1
. Необходимо дождаться загрузки jars. Я бы предпочел, чтобы этого не происходило, поскольку это один и тот же сервер, но я могу понять почему, посколькуcomp1
клиенту представляется совершенно другой хост. - Подключите клиент обратно к
master
. Опять же, я должен дождаться загрузки всех jar-файлов. Это не то, что я ожидал.Jars должны были быть загружены уже на шагах 1/2.
Используя панель управления Java, я могу видеть ресурсы, которые находятся в кэше. Мне кажется, что ресурсы привязаны к URL, поэтому я не знаю, почему я получаю то, что я делаю. Кажется, что два разных имени хостов для одного и того же сервера портят кэш клиента.
Я должен упомянуть, что master
имя хоста — это не просто DNS-псевдоним. Это фактически другой IP-адрес, к которому comp1/comp2
динамически привязывается / отсоединяется привязка во время выполнения приложения.
Можете ли вы объяснить, что я здесь вижу, или предложить какие-то пути для исследования?
Комментарии:
1. (Апплеты?.. в 2011 году? Боже …)
2. @road to yamburg — <вздох> Я знаю. Это долгая история…
3. Хотя вопрос очень интересный. Я подозреваю, что это как-то связано с безопасностью.
4. @wolcastle: апплет слишком большой? Может ли быть так, что из-за размера апплет сбрасывается (но по какой-то причине URL-адрес все еще отображается на панели управления?). Если вы увеличите размер кэша на панели управления, вы по-прежнему будете наблюдать это поведение?
5. Кроме того, вы могли бы проверить, правильно ли сервер выполняет ifModified-запрос, т. Е. указаны ли даты модификации и подобные вещи.
Ответ №1:
Авенус для расследования:
Это вполне может быть следствием имени файла jar — например, если оно всегда загружается в %TMP%app.jar, тогда app.jar будет проверяться при каждом посещении сервера.
Возможные обходные пути:
- Псевдоним файла на серверах, чтобы его можно было извлечь как master.jar , compN.jar
- Используйте 301 или 302, чтобы указать браузеру, что используется только один исходный файл jar (возможно, вам потребуется подписать jar из-за политик того же источника)