gohttp/gohttp.go

132 lines
3.6 KiB
Go
Raw Normal View History

2023-12-08 22:02:36 +08:00
package main
import (
"encoding/json"
"net/http"
"os"
"git.pyer.club/kingecg/gohttpd/admin"
"git.pyer.club/kingecg/gohttpd/model"
"git.pyer.club/kingecg/gohttpd/server"
2023-12-13 17:59:14 +08:00
"git.pyer.club/kingecg/gohttpd/utils"
2023-12-08 22:02:36 +08:00
"git.pyer.club/kingecg/gologger"
)
type GoHttp struct {
logger gologger.Logger
}
2025-02-18 00:54:50 +08:00
// Start 是 GoHttp 服务的启动入口。
// 它初始化配置、日志记录器,并根据配置设置必要的服务器。
2023-12-08 22:02:36 +08:00
func (g *GoHttp) Start() {
2025-02-18 00:54:50 +08:00
// 获取系统配置
2023-12-11 18:15:29 +08:00
conf := model.GetConfig()
2025-02-18 00:54:50 +08:00
// 初始化服务器的日志记录器
2023-12-10 19:26:09 +08:00
g.logger = gologger.GetLogger("Server")
2025-02-18 00:54:50 +08:00
// 记录 GoHttp 服务启动信息
2023-12-08 22:02:36 +08:00
g.logger.Info("start gohttpd")
2025-02-18 00:54:50 +08:00
2023-12-08 22:02:36 +08:00
// if g.conf != nil {
2025-02-18 00:54:50 +08:00
// 设置管理员处理器并使用管理员服务配置
adminHandler := server.NewServeMux(conf.Admin)
adminHandler.Handle("/api/", http.StripPrefix("/api", admin.AdminServerMux))
2025-02-18 00:54:50 +08:00
// 创建并启动管理员服务器
2023-12-13 10:59:47 +08:00
g.makeServer(conf.Admin, adminHandler)
2023-12-08 22:02:36 +08:00
2025-02-18 00:54:50 +08:00
// 遍历配置中的服务器列表,为每个服务器设置处理器并启动
for _, s := range conf.Servers {
2025-02-18 00:54:50 +08:00
// 为每个服务器创建处理器
sHandler := server.NewServeMux(s)
2025-02-18 00:54:50 +08:00
// 创建并启动该服务器
g.makeServer(s, sHandler)
}
2023-12-08 22:02:36 +08:00
2025-02-18 00:54:50 +08:00
// 遍历所有已初始化的服务器,开始监听并处理传入的连接
2023-12-08 22:02:36 +08:00
for _, listener := range server.ServerManager {
2025-02-18 00:54:50 +08:00
// 启动服务器
2023-12-08 22:02:36 +08:00
listener.Start()
2025-02-18 00:54:50 +08:00
// 开始服务,处理传入请求
listener.Serve()
2023-12-08 22:02:36 +08:00
}
2025-02-18 00:54:50 +08:00
// 记录 GoHttp 服务成功启动的信息
2023-12-08 22:02:36 +08:00
g.logger.Info("gohttpd start success")
}
2023-12-13 09:22:05 +08:00
func (g *GoHttp) makeServer(conf *model.HttpServerConfig, mux http.Handler) {
2023-12-08 22:02:36 +08:00
s := &http.Server{
Handler: mux,
}
2023-12-13 09:22:05 +08:00
name := conf.Name
port := conf.Port
ss := &server.Server{
Server: s,
Conf: conf,
}
server.AddServer(name, ss, port)
2023-12-08 22:02:36 +08:00
}
func (g *GoHttp) Stop() {}
2025-02-18 00:54:50 +08:00
// LoadConfig 函数用于加载配置文件并对配置中的路径进行规范化处理。
// 它读取指定的 JSON 配置文件,将其内容解析到 model.Config 结构体中,
// 然后对配置中的文件路径进行规范化处理,最后配置日志记录器。
2023-12-13 17:59:14 +08:00
func LoadConfig() {
2025-02-18 00:54:50 +08:00
// 规范化配置文件的路径,确保路径格式统一
2023-12-13 17:59:14 +08:00
cpath := utils.NormalizePath("./config.json")
2023-12-08 22:02:36 +08:00
2025-02-18 00:54:50 +08:00
// 从指定路径读取配置文件的内容
// 忽略可能的错误,实际应用中应处理错误
2023-12-08 22:02:36 +08:00
content, _ := os.ReadFile(cpath)
2025-02-18 00:54:50 +08:00
// 将读取的 JSON 内容解析到 model.Config 结构体中
2023-12-11 18:15:29 +08:00
json.Unmarshal(content, &model.Config)
2025-02-18 00:54:50 +08:00
// 规范化配置中日志追加器的文件路径
// 遍历配置中的所有日志追加器
2023-12-13 09:22:05 +08:00
for _, appender := range model.Config.Logging.Appenders {
2025-02-18 00:54:50 +08:00
// 检查追加器类型是否为文件类型
2023-12-13 09:22:05 +08:00
if appender.Type == "file" {
2025-02-18 00:54:50 +08:00
// 规范化文件路径
2023-12-13 17:59:14 +08:00
appender.Options["file"] = utils.NormalizePath(appender.Options["file"].(string))
2023-12-13 09:22:05 +08:00
}
}
2025-02-18 00:54:50 +08:00
// 规范化管理员服务器配置中的路径
2023-12-13 09:22:05 +08:00
normalizeServer(model.Config.Admin)
2025-02-18 00:54:50 +08:00
// 遍历配置中的所有服务器,规范化每个服务器配置中的路径
2023-12-13 09:22:05 +08:00
for _, server := range model.Config.Servers {
normalizeServer(server)
}
2025-02-18 00:54:50 +08:00
// 根据配置中的日志设置配置日志记录器
2023-12-11 18:15:29 +08:00
gologger.Configure(model.Config.Logging)
2025-02-18 00:54:50 +08:00
// 获取名为 "Server" 的日志记录器实例
2023-12-10 19:26:09 +08:00
logger := gologger.GetLogger("Server")
2025-02-18 00:54:50 +08:00
// 记录配置加载成功的信息
2023-12-10 19:26:09 +08:00
logger.Info("Load config success")
2023-12-08 22:02:36 +08:00
}
2023-12-13 09:22:05 +08:00
func normalizeServer(server *model.HttpServerConfig) {
2023-12-13 10:59:47 +08:00
for index, path := range server.Paths {
2023-12-13 09:22:05 +08:00
if path.Root != "" {
2023-12-13 21:09:01 +08:00
server.Paths[index].Root = utils.NormalizePath(path.Root)
2023-12-13 09:22:05 +08:00
}
}
if server.CertFile != "" {
2023-12-13 21:09:01 +08:00
server.CertFile = utils.NormalizePath(server.CertFile)
2023-12-13 09:22:05 +08:00
}
if server.KeyFile != "" {
2023-12-13 21:09:01 +08:00
server.KeyFile = utils.NormalizePath(server.KeyFile)
2023-12-13 09:22:05 +08:00
}
}