客户端有一堆Web服务器的ip地址。我的任务是检查客户端和每个服务器之间的连接质量,并选择哪个具有最低延迟。
我想到的第一个想法是使用java.net.Socket
类建立tcp连接并测量时间。但我不确定这是解决这项任务的最佳方法。
所以,我的问题是:
1)正在使用java.net.Socket
正确的解决方案吗?
2)如果答案是肯定的,我应该只进行一次连接还是2-3次获得平均时间?
3)如果答案是否定的,那么从Java做到这一点的正确方法是什么?
答案 0 :(得分:2)
1)我说使用java.net.Socket
会超调,或许最好使用java.net.URLConnection
可以从您将要使用的java.net.URL
获得反正。
3)您可以创建与您拥有的服务器一样多的URL
个实例,通过URLConnection
方法从每个实例获取openConnection
,然后调用其connection
方法测量所需的时间。
这不仅可以测量纯网络延迟,还可以测量每台服务器的处理时间,在一天结束时,您正在下载整个内容。在某种程度上,您还要测量每个服务器目前的加载方式。如果内容是由某种应用程序生成的,而不仅仅是提供静态页面的纯Web服务器,那么这可能很重要。
如果你这样做,我会建议你不时地在一个单独的线程中进行这个过程,这样主线程就会随时使用任何服务器。
如果这是纯网络延迟的问题,那么使用普通套接字将是一个更好,更简单的解决方案。
2)是的,我认为平均2-3个连接在纯网络延迟的情况下是有意义的,但是当使用URLConnection
解决方案时,它会增加太多的负载。
我希望它有所帮助。