2012-09-19 144 views
0

在基於AsynchronousServerSocketChannel和AsynchronousSocketChannel的服務器中,如何檢查來自給定IP地址的連接是否已經存在?我想發送一個特定的消息給來自已經連接的IP地址的連接(要求它稍後再試;我正在處理非常特定的客戶端局域網,如果共享而不是被迫由服務器序列化)。但是,我無法獲得IP地址列表來搜索相同的IP地址是否已經有連接。除了將每個新連接的IP地址插入(並在關閉時刪除它們)像ConcurrentSkipListSet之類的東西之外,是否還有更優雅/更有效的方法?此外,我想定期從所有打開的連接中收集一些網絡統計信息(例如上傳了多少個文件塊)。我想出的有效方法是使用ConcurrentLinkedQueue將完成處理程序(塊發送網絡寫入)的更新發送到信息收集線程,在任何時候將某個事件插入到隊列中時喚醒線程。我假設喚醒操作是非阻塞的,但我不知道它可能有多昂貴,因爲我確信至少它涉及到一個互鎖的CPU指令(這意味着一個內存圍欄並會進一步影響執行速度等等。)。還有其他建議嗎?獲取NIO.2服務器中客戶端IP地址列表

回答

0

您將不得不維護自己的數據結構。所有的TCP將給你的是插座,你可以從中獲得他們的遠程地址和端口。

相關問題