Domanda

Ho bisogno di comprimere parti del traffico di rete della nostra applicazione per le prestazioni. Presumo che ciò significhi che devo stare lontano da alcuni dei più recenti algoritmi come bzip2, che penso di aver sentito parlare più lentamente.

È stato utile?

Soluzione

Puoi utilizzare Deflater / Inflater che è costruito nel JDK. Ci sono anche GZIPInputStream e GZIPOutputStream, ma dipende davvero dal tuo esatto utilizzo.

Modifica:

Leggendo ulteriori commenti sembra che il taffic di rete sia HTTP. A seconda del server, probabilmente ha il supporto per la compressione (specialmente con deflate / gzip). Il problema diventa quindi sul client. Se il client è un browser, probabilmente lo supporta già. Se il tuo cliente è un client di servizi web o un client http controlla la documentazione per quel pacchetto per vedere se è supportato.

Sembra che httpclient di jakarta-commons possa richiedere di eseguire manualmente la compressione. Per abilitare ciò sul lato client dovrai fare qualcosa come

.addRequestHeader("Accept-Encoding","gzip,deflate");

Altri suggerimenti

Se il traffico di rete passa su HTTP, la maggior parte dei vari server Web / container servlet supporta il zippaggio negoziato, ad esempio mod_deflate per Apache.

L'algoritmo di compressione dipende da ciò che stai cercando di ottimizzare e dalla larghezza di banda disponibile.

Se sei su una LAN gigibit, quasi tutti gli algoritmi di compressione rallenteranno un po 'il tuo programma. Se ti connetti tramite WAN o Internet, puoi permetterti di fare un po 'più di compressione. Se ti sei connesso a una connessione remota, dovresti comprimere il più possibile.

Se questa è una WAN, potresti trovare soluzioni hardware come Riverbed's sono più efficaci, poiché funzionano su una serie di traffico e non richiede alcuna modifica al software.

Ho un caso di prova che mostra la differenza di compressione relativa tra Deflate, Filtered, BZip2 e lzma . Collega semplicemente un campione dei tuoi dati e testa i tempi tra due macchine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top