获取NIO.2服务器中客户端的IP地址列表

时间:2012-09-19 02:29:29

标签: java networking asynchronous synchronization nio

在基于AsynchronousServerSocketChannel和AsynchronousSocketChannel的服务器中,如何检查来自给定IP地址的连接是否已存在?我想向来自已经连接的IP地址的连接发送一条特定的消息(要求它稍后重试;我正在处理非常具体的客户端LAN,如果共享而不是强制使用,其带宽将被很难利用由服务器序列化)。但是,我认为无法获取IP地址列表来搜索相同的IP地址是否已连接。除了将每个新连接的IP地址插入(并在关闭时删除它们)之外,是否有更优雅/有效的方法来执行此操作,而不是像ConcurrentSkipListSet那样?

此外,我想定期从所有打开的连接中收集一些网络统计信息(例如,已经上传了多少个文件块)。我提出的有效执行此操作的唯一方法是使用ConcurrentLinkedQueue将完成处理程序(块发送网络写入)的更新发送到信息收集线程,并在将任何内容插入队列时唤醒线程。我假设唤醒操作是非阻塞的,但我不知道它有多贵,因为我确信它至少涉及一个互锁的CPU指令(这意味着内存栅栏并进一步影响执行速度)等等。)。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

您必须维护自己的数据结构。所有TCP都会为您提供套接字,您可以从中获取其远程地址和端口。