From b9edb7b7ded2f714c8401d47dba9dd039b3e4125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E5=AE=81?= <1772105645@qq.com> Date: Mon, 25 May 2026 13:05:33 +0800 Subject: [PATCH] feat: add server layer with HTTP and gRPC transport Create internal/server package with HTTP and gRPC server constructors using Kratos transport layer. Includes Wire provider set for DI, recovery/tracing/logging middleware, and graceful nil-safe config handling. Fix .gitignore 'server' pattern to only match root-level binary. --- .gitignore | 2 +- internal/server/grpc.go | 34 ++++++++++++++++++++++++++++++++++ internal/server/http.go | 34 ++++++++++++++++++++++++++++++++++ internal/server/server.go | 8 ++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 internal/server/grpc.go create mode 100644 internal/server/http.go create mode 100644 internal/server/server.go diff --git a/.gitignore b/.gitignore index 80dd085..f47e9ec 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ *.so *.dylib file-service -server +/server bin/ # Test binary, built with `go test -c` diff --git a/internal/server/grpc.go b/internal/server/grpc.go new file mode 100644 index 0000000..7d9ed5c --- /dev/null +++ b/internal/server/grpc.go @@ -0,0 +1,34 @@ +package server + +import ( + pb "rag/file-system/api/file/v1" + "rag/file-system/internal/conf" + "rag/file-system/internal/service" + + "github.com/go-kratos/kratos/v2/log" + "github.com/go-kratos/kratos/v2/middleware/logging" + "github.com/go-kratos/kratos/v2/middleware/recovery" + "github.com/go-kratos/kratos/v2/middleware/tracing" + "github.com/go-kratos/kratos/v2/transport/grpc" +) + +func NewGRPCServer(c *conf.Server, svc *service.FileService, logger log.Logger) *grpc.Server { + opts := []grpc.ServerOption{ + grpc.Middleware( + recovery.Recovery(), + tracing.Server(), + logging.Server(logger), + ), + } + if c != nil && c.Grpc != nil { + if c.Grpc.Addr != "" { + opts = append(opts, grpc.Address(c.Grpc.Addr)) + } + if c.Grpc.Timeout != nil { + opts = append(opts, grpc.Timeout(c.Grpc.Timeout.AsDuration())) + } + } + srv := grpc.NewServer(opts...) + pb.RegisterFileServiceServer(srv, svc) + return srv +} diff --git a/internal/server/http.go b/internal/server/http.go new file mode 100644 index 0000000..59e8cf3 --- /dev/null +++ b/internal/server/http.go @@ -0,0 +1,34 @@ +package server + +import ( + pb "rag/file-system/api/file/v1" + "rag/file-system/internal/conf" + "rag/file-system/internal/service" + + "github.com/go-kratos/kratos/v2/log" + "github.com/go-kratos/kratos/v2/middleware/logging" + "github.com/go-kratos/kratos/v2/middleware/recovery" + "github.com/go-kratos/kratos/v2/middleware/tracing" + "github.com/go-kratos/kratos/v2/transport/http" +) + +func NewHTTPServer(c *conf.Server, svc *service.FileService, logger log.Logger) *http.Server { + opts := []http.ServerOption{ + http.Middleware( + recovery.Recovery(), + tracing.Server(), + logging.Server(logger), + ), + } + if c != nil && c.Http != nil { + if c.Http.Addr != "" { + opts = append(opts, http.Address(c.Http.Addr)) + } + if c.Http.Timeout != nil { + opts = append(opts, http.Timeout(c.Http.Timeout.AsDuration())) + } + } + srv := http.NewServer(opts...) + pb.RegisterFileServiceHTTPServer(srv, svc) + return srv +} diff --git a/internal/server/server.go b/internal/server/server.go new file mode 100644 index 0000000..15f4b09 --- /dev/null +++ b/internal/server/server.go @@ -0,0 +1,8 @@ +package server + +import "github.com/google/wire" + +var ProviderSet = wire.NewSet( + NewHTTPServer, + NewGRPCServer, +)