有没有办法强制刷新主机?

Posted

技术标签:

【中文标题】有没有办法强制刷新主机?【英文标题】:Is there a way to force refresh hosts in go? 【发布时间】:2016-01-11 01:14:32 【问题描述】:

我正在运行一个 Beego 应用程序,它依赖于 /etc/hosts 中的更新(通过 Docker 链接)来查找其他服务器。 /etc/hosts 更新正常,但应用程序不会使用新主机,除非它重新启动或等待太久。在查看了src/net/hosts 的文档后,我似乎被锁定在 5 分钟的刷新时间中。

有没有办法强制刷新这个缓存,还是我看错了这个问题?

【问题讨论】:

我也看不出没有组装的方法。 我可以更改 src/net/hosts.go 中的超时常量并滚动我自己的自定义 go 构建,但必须有另一种方法。很高兴看到我不是唯一一个,而是坚持这个。 通常动态更改应通过其他机制完成,例如 dns 或其他配置数据库。如果您在启用 cgo 的情况下构建二进制文件,它将使用系统解析器来查找主机(这也不能保证它不会被您的系统在短时间内缓存,但在大多数情况下通常不到 5 分钟) @Diablojoe 我认为您还可以复制使用 hosts.go 的库,并对其进行修补以使用修改后的版本。除非您在解决方案中使用大量受影响的库,否则这是一种选择。除此之外,它可能是设计的方式......您可能已经选择了一个解决方案?您能否将其记录为答案:) 我刚刚使用以下代码对此进行了测试。当我运行它并将主机添加到我的主机文件时,它会立即解决它。我错过了什么吗? play.golang.org/p/HwOLn3w9BP除了net.LookupHost(),你还依赖其他函数吗? 【参考方案1】:

The hosts file cache time in Go was shortened to 5 seconds. 无论是使用纯 Go(默认,有例外)还是使用 Cgo 解析器,Go 的行为都会有所不同。为了避免纯 Go 解析器的 Go 内部缓存,目前除了强制 Cgo 解析器之外别无他法。

There are various ways to force Go to use the Cgo resolver.way to force Go to use the Cgo resolver suggested by the documentation是将环境变量GODEBUG设置为netdns=cgo

【讨论】:

以上是关于有没有办法强制刷新主机?的主要内容,如果未能解决你的问题,请参考以下文章

ACCOUNT_USAGE 强制刷新

强制刷新的 HTML 链接?

我可以强制 .htaccess 刷新吗?

你如何强制刷新 wx.Panel?

如何强制视图刷新而不让它从可观察对象自动触发?

如何强制浏览器刷新网页的缓存版本