我有以下代码,用于从静态文件目录 (staticFilesDir
) 提供静态文件:
for _, prefix := range []string{"css", "img", "js", "static"} {
prefix = "/" + prefix + "/"
fs := http.FileServer(http.Dir(staticFilesDir + prefix))
r.PathPrefix(prefix).Handler(http.StripPrefix(prefix, fs))
}
这个目录会不时发生变化,目前我总是需要重新启动服务器进程才能使用新值。
如何在不重新启动整个过程的情况下重新配置/重新加载FileServer
?
额外的复杂性:http 服务器的其他处理程序正在执行长时间运行的作业(包括子进程等),我希望在重新加载期间保持不变。
这个非常典型的任务的标准解决方案是什么?
最佳答案
您可以在两者之间添加间接级别:
type MyFileServer struct {
sync.RWMutex
http.FileServer
}
func (f *MyFileServer) SetDir(dir string) {
f.Lock()
defer f.Unlock()
f.FileServer=http.FileServer(dir)
}
func (f *MyFileServer) ServeHTTP(w http.ResponseWriter,req *http.Request) {
f.RLock()
defer f.RUnlock()
f.FileServer.ServeHTTP(w,req)
}
关于http - 如何动态更改http服务器的静态文件目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68732197/