2010-04-01 29 views
5

engellenmeyen I/O, uzaktaki bir adrese bağlanmak için kod arar gibi bir şey:java.nio bağlantı zaman aşımı belirler kullanma

bağlantı işlemi ardından finishConnect() çağırarak bitirilmesi olacak
SocketChannel channel = SelectorProvider.provider().openSocketChannel(); 
channel.configureBlocking(false); 
channel.connect(address); 

Bazı seçici, ilgili tuşa isConnectable() yazdığında kanal.

bu deyim kullanırken bağlantı zaman aşımı belirtmek için bir yolu var mı?

cevap

0

İlginç bir soru. Nio'nun kendisinin bir çözüm sağladığından emin değilim.

Deneyimlerime göre, bağlantıya katılmak için bir Callable çalıştırdım ve sonra yanıt için 'aralık' ve 'zaman aşımı' değişkenlerini ve yanıt için Thread.sleep() değişkenlerini kullanarak bir yanıt için yoklamak için Gelecek'i kullandım . yararlı bir yönde işaret

Umarım ... Ayrıca

, ben (bir nio çerçeve olarak Mina anlatabilir misiniz) Apache Mina bakmak öneririz. Gerçekten mantıklı değil StreamIoHandler http://mina.apache.org/report/trunk/apidocs/org/apache/mina/handler/stream/StreamIoHandler.html

1

söz konusu örneğin, sizin için bu tür şeylerle bir sürü işler. Zaman aşımları engelleme modu içindir. Bunu istiyorsanız, kanalı engelleme modunda bırakın ve channel.socket().connect(address, timeout);'u arayın. Engelleme olmayan modu istiyorsanız, mevcut kodunuzu kullanın; sonra bir Seçici oluşturun; kanalı OP_CONNECT için kaydettirin; Alacağınız zaman finishConnect(), arayıp bu OP_CONNECT Deregister doğrudur dönerse ve kod geri kalanı ile devam edin.

İlgili konular