2013-04-27 7 views
19

Sono interessato a riutilizzare HttpUrlConnection (come parte di un protocollo statefull tra server e client che sto sviluppando). So che esiste una connessione = intestazione keep-alive per http persistente. Ora, voglio sapere come riutilizzare una tale convenzione. ho scritto questo codice:Come riutilizzare HttpUrlConnection?

URL u = new java.net.URL("http://localhost:8080/Abc/Def"); 
HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
c.setRequestMethod("GET"); 
c.setRequestProperty("Connection", "keep-alive"); 
c.setHeader("A","B"); 
c.getInputStream() //here I see that server gets my messages (using DEBUG) 
c.setHeader("B","C"); // 

Ora come faccio a Rinvia "B" header al server, ho provato ri-connessione, ecc, ma nulla viene a lavorare.

e il server anche eseguire response.setHeader("Connection", "keep-alive");

Ho guardato in molti forum, ma nessuno ha scritto su questo. Forse HttpURLConnection non gestisce questo?

+0

@Kowser Un commento senza senso. La specifica HTTP è * circa * intestazioni e corpi. Non ha nulla da dire sull'API per HttpURLConnection. – EJP

risposta

36

Non è così. Chiudi questo e ne crei uno nuovo. Fa il pooling e il keepalive delle connessioni TCP dietro le quinte.

+3

Brillante, non mi è nemmeno venuto in mente che potesse funzionare - ho pensato che questo aprirà un'altra connessione. – user967710

+1

Tranne che spesso non lo fa, per ragioni che non sono chiare. – Tuntable

+0

@aberglas Mai visto questo, nel codice di produzione che è in esecuzione da sette anni. Se hai delle prove per favore produrle. L'aneddoto non raccolto non è sufficiente. – EJP