Java RMI + SSL + сжатие = НЕВОЗМОЖНЫЙ!

Я имею, устанавливают RMI + SSL. Это работает отлично. Но не кажется возможным подсунуть сжатию промежуточный RMI и SSL. Так, чтобы запросы RMI были сжаты, прежде чем они будут отправлены по SSL.

Я видел, что некоторые размещают в Интернете, предлагают использовать SSLSocketFactory.createSocket() который берет Сокет для обертывания SSL по сжимающемуся сокету. Но это кажется, что попыталось бы сжать сам протокол SSL, который, вероятно, не очень сжимаем.

Я предположил, что должен создать a Socket прокси (подкласс Socket это подчиняется другому Socket, как FilterOutputStream делает). Имейте обертку прокси потоки Input/Ouput со сжатием. И имейте мой SocketFactory и ServerSocketFactory возвратите прокси, перенесясь SSLSocket.

Но тогда у нас есть проблема буферизации. Сжатие буферизует данные, пока это не получает достаточно, которое стоит сжать, или сказано сбросить. Это прекрасно, когда у Вас нет назад и вперед коммуникации по сокету. Но с кэшируемыми сокетами в RMI, у Вас есть это. Без способа определить конец RMI запрашивают, таким образом, можно сбросить сжатые данные.

Sun имеет RMISocketFactory пример, делающий что-то вроде этого, но они не обращаются к этому вообще.

примечания:
1. SSL поддерживает сжатие, но я ничего не могу найти о включении этого в JSSE
2. Я знаю, что сжатие на большом количестве маленьких несвязанных блоков (поскольку RMI обычно состоит из) не очень выгодно.
3. Я знаю, что, если я отправляю большие запросы, RMI не является лучшим выбором.
4. Существует SSLRMISocketFactory в Java 6. но это ничего не добавляет по моей пользовательской реализации.

9
задан DragonFax 3 March 2010 в 19:39
поделиться