0

在基于 AsynchronousServerSocketChannel 和 AsynchronousSocketChannel 的服务器中,如何检查来自给定 IP 地址的连接是否已经存在?我想向来自已经连接的 IP 地址的连接发送特定消息(要求它稍后再试;我正在处理非常特定的客户端 LAN,如果共享而不是被迫使用带宽将得不到充分利用由服务器序列化)。但是,我看不到获取 IP 地址列表来搜索相同 IP 地址是否已经有连接的方法。除了将每个新连接的 IP 地址插入到 ConcurrentSkipListSet 之类的东西(并在关闭时将其删除)之外,还有更优雅/有效的方法吗?

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

4

1 回答 1

0

您将不得不维护自己的数据结构。所有 TCP 将给您的是套接字,您可以从中获取它们的远程地址和端口。

于 2012-09-19T09:54:08.963 回答