【发布时间】:2021-06-13 12:52:00
【问题描述】:
我有一个具有多个 HTTP 处理程序包装器的 Web 服务器。其中之一是 ACL,它作为结构数组从 CSV 加载并传递给 ACL HTTP 处理程序。我希望能够更改 csv 文件以更新新的过滤器条目,而无需重新启动 Web 服务器。
我尝试添加标志,然后使用删除数组的布尔值调用它,并通过调用新的 csv 文件重新加载它。但这并没有真正起作用,它没有调用正在运行的进程中的现有数组表。
实现这一目标的最佳方法是什么?这是我的程序结构,我只是想避免在必须更新 ACL 时重新启动 Web 服务器。我可以使用单独的键值数据库,但在这个阶段我必须保持简单,因为服务器不属于我。
func main() {
ACL := aclGroup()
mux := http.NewServeMux()
srv := &http.Server{
Handler: aclAction(logRequestHandler(mux), ACL),
Addr: listen,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 5 * time.Second,
MaxHeaderBytes: 1 << 20,
}
...
}
func aclAction(h http.Handler, acl []*ACLlist) http.Handler {
...
}
【问题讨论】: