我無法從java文檔中清楚地理解這一點。是否在可選頻道上操作和登記事宜?
考慮我有一個非阻塞模式的可選頻道(SocketChannel
)。如果我在調用channel.connect()
時返回false,然後我用一個選擇器註冊頻道,如果在select()是第一個之前連接實際完成,select()
會用「連接」操作更新創建的鍵被調用,甚至在註冊完成之前?
事件的順序是:
connect
(返回false
)- 莫名其妙插座成爲在這個時候 「連接」
register
(返回選擇鍵)select
(做了不同的線程,但保證後register
)
這也適用於其他操作。一般來說,頻道是否按照該頻道上最後一次操作進行註冊,或選擇鍵是否接收自上次頻道操作以來發生的所有未完成事件,都有關係嗎?
我很抱歉,但在引用的文檔中,如果事件發生在註冊之前,顯然會選擇一個事件? –
@PawelVeselov @PawelVeselov好問題,但你原來的問題的答案是'是':連接完成後,每次你選擇'()'時,'OP_CONNECT'甚至會被激發,直到你註銷'OP_CONNECT.' – EJP
@EJP我認爲這是我原來的問題,或者至少是 - 它在哪裏聲稱,確保選擇鍵將聲明連接操作正在等待,即使在通道註冊之前發生了?你會說,但我不明白爲什麼。 –