猿问

如何动态更改http服务器的静态文件目录?

我有以下代码段,它从静态文件目录() 提供静态文件: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服务器的其他处理程序正在执行长时间运行的作业(包括子进程等),我希望在重新加载期间保持不变。


这个非常典型的任务的标准解决方案是什么?


呼如林
浏览 89回答 1
1回答

慕村225694

您可以在以下两者之间添加间接层: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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答