Set<SelectionKey> selectionKeys = selector.selectedKeys();這里沒必要刪除,也就沒必要使用迭代器遍歷了,因為for循環都會生成一個新的Set對象。如果是在for循環外聲明并初始化Set<SelectionKey> selectionKeys = new HashSet<~>(),并且for循環中使用的是selectionKeys.addAll(selector.selectedKeys()),這樣才需要迭代器刪除的吧?請各位大佬不吝賜教。
2019-05-19
最贊回答 / 張小喜
最開始沒有任何客戶端接入時,serverSocketChannel注冊的是ACCEPT事件,等待客戶端接入;等到有客戶端接入后,服務器與客戶端建立的socketChannel就要注冊READ事件了。而serverSocketChannel還是注冊ACCEPT事件,繼續等待其他客戶端的接入。
2019-05-14
每次select(),都應該使用一個空的SelectionKey集合。否則下次Select()再處理,會引起狀態錯誤。所以 在每次的select()后的循環處理中,將每個Channel就緒信息刪除,其實也可以在每次Select()后整體清空SelectionKey集合
2019-05-13