Files
yanzuoguang b2692d76f2 feat(platform): 实现HTTP服务器启动和管道适配器- 添加HTTP服务器启动功能,支持HTTP和HTTPS配置- 实现pipeline适配器,将请求处理管道与HTTP服务器集成
-修复CreatePipeline函数中的循环条件错误
- 移除main.go中冗余的日志和配置处理代码
- 新增placeholder包用于启动平台服务- 添加完整的HTTP服务器配置选项,包括端口、主机名和TLS设置
- 实现并发安全的服务器启动机制
2025-11-03 21:48:08 +08:00

75 lines
2.0 KiB
Go

package http
import (
"fmt"
"net/http"
"platform/config"
"platform/logging"
"platform/pipeline"
"sync"
)
type pipelineAdaptor struct {
pipeline.RequestPipeline
}
func (p pipelineAdaptor) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
err := p.ProcessRequest(request, writer)
if err != nil {
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
}
func Serve(pl pipeline.RequestPipeline, cfg config.Configuration, logger logging.Logger) *sync.WaitGroup {
wg := sync.WaitGroup{}
adaptor := pipelineAdaptor{RequestPipeline: pl}
serveHttp(cfg, logger, &wg, &adaptor)
serveHttps(cfg, logger, &wg, &adaptor)
return &wg
}
func serveHttp(cfg config.Configuration, logger logging.Logger, wg *sync.WaitGroup, adaptor *pipelineAdaptor) {
enableHttp := cfg.GetBoolDefault("http:enableHTTP", true)
if !enableHttp {
return
}
httpPort := cfg.GetIntDefault("http:port", 5000)
httpName := cfg.GetStringDefault("http:name", "localhost")
logger.Debugf("Starting HTTP server on port %v:%d", httpName, httpPort)
wg.Add(1)
go func() {
url := fmt.Sprintf("%v:%v", httpName, httpPort)
err := http.ListenAndServe(url, adaptor)
if err != nil {
panic(err)
}
}()
}
func serveHttps(cfg config.Configuration, logger logging.Logger, wg *sync.WaitGroup, adaptor *pipelineAdaptor) {
enableHttps := cfg.GetBoolDefault("http:enableHTTPS", false)
if !enableHttps {
return
}
httpsPort := cfg.GetIntDefault("http:httpsPort", 5500)
httpsName := cfg.GetStringDefault("http:httpsName", "localhost")
certFile, cfOk := cfg.GetString("http:httpsCert")
keyFile, kfOk := cfg.GetString("http:httpsKey")
if cfOk && kfOk {
logger.Debugf("Starting HTTPS server on port %v:%d", httpsName, httpsPort)
wg.Add(1)
go func() {
url := fmt.Sprintf("%v:%v", httpsName, httpsPort)
err := http.ListenAndServeTLS(url, certFile, keyFile, adaptor)
if err != nil {
panic(err)
}
}()
} else {
panic("HTTPS certificate or key file setting not found")
}
}