在基于AsynchronousServerSocketChannel和AsynchronousSocketChannel的服务器中,如何检查来自给定IP地址的连接是否已经存在?我希望向来自已连接的IP地址的连接发送特定消息(要求它稍后重试;我正在处理的是非常特定的客户端LAN,如果共享而不是由服务器强制串行化,则其带宽利用率将很低)。但是,我没有办法获得IP地址列表来搜索相同的IP地址是否已经有连接。除了向ConcurrentSkipListSet之类的东西插入每个新连接的IP地址(并在关闭时将其删除)之外,还有什么更优雅/更有效的方法来实现这一点吗?
此外,我还想定期从所有打开的连接中收集一些网络统计信息(比如上传了多少块文件)。我想出的唯一有效的方法是使用ConcurrentLinkedQueue将更新从完成处理程序(块发送网络写入)发送到信息收集线程,每当有东西插入到队列中时唤醒线程。我假设唤醒操作是非阻塞的,但我不知道它可能有多昂贵,因为我确定它至少涉及一个互锁的CPU指令(这意味着内存围栏,并进一步影响执行速度等)。还有其他建议吗?
发布于 2012-09-19 17:54:09
你必须维护你自己的数据结构。TCP为您提供的只是套接字,您可以从中获取它们的远程地址和端口。
https://stackoverflow.com/questions/12487770
复制相似问题