我怎样才能最有效地浏览一个包含 12,000 个 IP 地址的数据库并 ping 打开所有这些地址的套接字? 目前我是这样工作的:
- 获取列表中的所有IP
- 对于每个 IP,打开一个新线程,打开与服务器的套接字并从中接收数据包。
- 在新线程上,根据 IP 是否在线以及打开套接字时返回的信息更新信息。
我目前的解决方案有效,只需要很长时间才能通过数据库一次。我正在尝试找到一种非常快速地访问数据库的方法;但是,我不知道从哪里开始。感谢任何帮助,谢谢!
编辑:我正在打开一个套接字并发送一个 TCP 数据包,然后存储信息。
最佳答案
为此尝试使用 netty (NIO) 之类的东西。您可以在一个线程中将您的请求分散到所有 IP(无论出于何种原因),然后在另一个线程中等待返回。您当前的方法使用线程来管理所有远程主机的异步响应,这似乎没问题并且会起作用,但是仅仅为了等待而生成线程并不是最佳选择。最好打开大量连接,发送数据包,等待结果并让操作系统管理等待。
如果您想执行时间不可预测的并发计算,请仅使用多线程。如果您有明确定义的任务,例如打开大量套接字、发送数据和等待响应,请使用 Java 中的 NIO 框架(顺便说一句。通常情况下,单个线程在这里就足够了)。
关于java - 使用 Java 的高效 "Pinging",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789596/