【发布时间】:2011-01-26 11:31:21
【问题描述】:
我目前正在做一些网络编程,并且有几个关于超时的问题。
执行 ping 是否有建议的超时时间?
另外,在进行 URL 连接时是否有建议的超时时间?
编辑:就我而言,通过 ping,我只是想查看设备是否已连接到网络。通过 URL 连接,我试图打开一个 URL 并从中获取文本。
谢谢
【问题讨论】:
标签: java network-programming timeout connection
我目前正在做一些网络编程,并且有几个关于超时的问题。
执行 ping 是否有建议的超时时间?
另外,在进行 URL 连接时是否有建议的超时时间?
编辑:就我而言,通过 ping,我只是想查看设备是否已连接到网络。通过 URL 连接,我试图打开一个 URL 并从中获取文本。
谢谢
【问题讨论】:
标签: java network-programming timeout connection
一般而言,我为请求设置了 60 秒的超时时间(如果您通过请求流式传输许多 MB 的文件,这会有所不同)。
有两种类型的 ping。在请求时实际 ping 可 ping 组件的主动 ping 和在后台 ping 组件并在请求时仅返回缓存状态的被动 ping。在我的应用程序中,我仍然将这些超时设置为 60 秒,但如果您认为自己想要快速失败,请随意设置一个较小的数字。
【讨论】:
您希望您的网络表现如何?这将决定您如何看待连接的行为以及您何时期望超时。
例如您的 ping 将执行多少次网络跳转?这些设备在正常情况下的负载如何?
【讨论】:
这取决于您要连接的位置。
举个例子:如果你连接到同一个数据中心甚至同一个机架的另一个盒子,只有很少的跳转(路由器,交换机,防火墙,......),连接通常应该在一秒钟内建立 -因此不需要 30 秒超时(我将其设置为 5 秒)。
如果你连接到另一个大陆的盒子,那就完全不同了。丢包、拥挤的路由和连接可能会减慢连接速度。 30 秒或 60 秒的超时听起来很公平。
此外,您应该考虑您的客户是否真的想要等待 60 秒。再举一个例子,如果您连接到 Web 服务以服务来自用户的 HTTP 请求。等待 60 秒没有多大意义,因为用户无论如何都会取消/离开请求。此外,这种阻塞服务调用可能会导致大量等待线程填满服务器的线程池——这不是一件好事。在这种情况下,我会将超时设置为 10 秒,并且一旦 Web 服务变慢,就会冒着向用户抛出一些“服务不可用”或类似页面的风险。
【讨论】: