Dobrý den,

zkusím odpovědět. To co chce původní tazatel je přesně to co jsme udělali my (WinStrom FlexiBee). Napsali jsme si vlastní SSL Socket Factory. Ten pak uvádíme jako parametr JDBC spojení. Více na http://jdbc.postgresql.org/documentation/83/ssl-factory.html

Takže nejdříve provedeme kompresi a pak vytvoříme běžný SSL socket. To samé pak děláme na straně serveru: máme tam Javovský server (wrapper), který data takto rozbalí a odšifruje a pak vše přepošle na port PostgreSQL. Celé to máme implementované jako součást Jetty, takže na jednom portu může běžet HTTP, HTTPS a i takový to wrapper. Více na http://blog.softeu.cz/protokolovy-multiplex-a-vlastni-rmi/

Ale nelze na to použít GZIPInputStream a GZIPOutputStream. Tomu totiž chybí funkce, kterou GZIP normálně umí (myslím nativní knihovna zlib) a to je zapsání streamu při volání flush(). Musíte totiž při volání flush dokončit komprimační hlavičku a poslat data. Což znamená drobné snížení kompresní efektivity. Nevím proč to do GZIPInputStream a GZIPOutputStream nedali.

Je nutné na to použít JZLib. Ten už to pak umí.

Petr Ferschmann

Dne 11.1.2011 15:01, Petr Synek napsal(a):
Zdravim,

obecne Java kompresi umi, treba pomoci java.util.zip.GZIPOutputStream.

Programove komprimovat SSL spojeni by melo jit takhle:
OutputStream sslOutputStream = sslSocket.getOutputStream();
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(sslOutputStream);


Nicmene ty asi chces zapnout kompresi uvnitr SSL spojeni nejak deklarativne. Kazdopadne i kdyz se ti na strane Java klienta podari kompresi zapnout, tak to same se musi udelat i na strane postgresql serveru. Na obou stranach musi byt pouzity stejny kompresni algoritmus, napr. gzip.

Pokud postgresql kompresi zapnout neumi, tak by slo mezi Java klienta a postgresql vlozit nejake vlastni 2 jednoduche proxy servery, co budou resit jen kompresi a SSL. V podstate to ale znamena napsat jednoducheho VPN klienta a server. Tak je pak otazka jestli neni lepsi pouzit rovnou to OpenVPN :-)

Petr

On 11.01.2011 12:24, Petr Michálek wrote:
Ahoj,

řeším problém přenosu velkého objemu dat přenášených přes SSL spojení
mezi Postgresql serverem a Java aplikací.
Experimentoval jsem s přenosem (ne SSL) v rámci OpenVPN. LZO komprese
snížila objem přenášených dat zhruba o 50%, ale nasazení OpenVPN není
řešení.

1. Umí postgresql komprimovat (JDBC) spojení?

2. Umí JAVA kompresi SSL kanálu? Pokud ano, jak ji nastavit?
(GNU Java pravděpodobně ano, ale já potřebuji použít Sun Javu)

Na odpověď nebo případné nápady se těší

Petr M.



--
Petr Ferschmann

--
SoftEU s.r.o.
Lochotínská 18, 301 00 Plzeň, Česká republika
Phone: +420 371 124 300, +420 371 124 384
E-mail: pferschm...@softeu.com  http://www.softeu.com/

<<attachment: pferschmann.vcf>>

Odpovedet emailem