2010-04-01 5 views
5

Utilizzando non-blocking I/O, il codice per la connessione a un indirizzo remoto simile a:Specificare timeout di connessione in java.nio

SocketChannel channel = SelectorProvider.provider().openSocketChannel(); 
channel.configureBlocking(false); 
channel.connect(address); 

Il processo di connessione dovrà poi essere finito invocando finishConnect() su il canale quando un selettore dice il tasto corrispondente isConnectable().

C'è un modo per specificare il timeout della connessione quando si utilizza questo idioma?

risposta

0

Interessante domanda. Non sono sicuro che nio fornisca una soluzione.

Nella mia esperienza, ho eseguito un Callable per tentare la connessione, quindi ho utilizzato il futuro per eseguire il polling di una risposta, utilizzando le variabili "intervallo" e "timeout" per il ciclo e Thread.sleep() per una risposta .

Speriamo che punta in una direzione utile ...

Inoltre, vi consiglio di dare un'occhiata a Apache Mina (si potrebbe descrivere come un quadro Mina nio). Gestisce un sacco di questo tipo di cose per voi, per esempio in StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html

1

La domanda non ha molto senso. I timeout sono per la modalità di blocco. Se lo desideri, lascia il canale in modalità di blocco e chiama channel.socket().connect(address, timeout);. Se si desidera la modalità non bloccante, utilizzare il codice corrente; quindi creare un selettore; registrare il canale per OP_CONNECT; quando lo chiami, chiama finishConnect(), e se restituisce il vero deregistro OP_CONNECT e continua con il resto del codice.