2015-01-16 41 views
0

我的問題是如何從選擇器中刪除在給定時間內沒有響應的主機。刪除無響應的頻道 - java

假設我在OP_CONNECT的選擇器中註冊了1個通道。通道處於非阻塞模式。我添加的主機知道它沒有響應,所以我的程序無法連接,並且選擇器的select()方法總是返回0.現在,我如何使用select(timeout)並刪除沒有響應的主機?

主機平的輸出:

25 packets transmitted, 0 received, 100% packet loss, time 24000ms 

回答

1

只需關閉相關頻道()。這將自動取消所有SelectionKeys,並將其從Selector(s)的權限中刪除。

但是我個人無法看到客戶端的NIO或非阻塞模式。

+0

謝謝。 NIO對於小型資源的網絡爬蟲很少使用:) –

+0

如果我現在添加一個頻道,並且沒有響應,並且選擇器的select()等待4000個milis超時。在3000微秒內,另一個通道被添加到選擇器。但第二個通道需要2000毫秒的響應時間,因爲開銷很高。如果select()將返回0,我將按照您的建議關閉所有通道。這個解決方案是否會刪除第二個頻道?如果是的話,那麼它不是正確的解決方案 –

+1

@GiorgosFandomas沒有一個會發生。如果沒有喚醒選擇器,則無法註冊其他頻道。無論如何,直到下面的select(),通道關閉和按鍵取消纔會生效。 – EJP