You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

server.go 3.1 kB

2 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package http
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "gitlink.org.cn/cloudream/common/pkgs/logger"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. "gitlink.org.cn/cloudream/storage/client/internal/services"
  7. )
  8. // Server 结构体定义了HTTP服务的基本配置和操作
  9. type Server struct {
  10. engine *gin.Engine // Gin框架的HTTP引擎
  11. listenAddr string // 服务监听地址
  12. svc *services.Service // 业务逻辑服务实例
  13. }
  14. // NewServer 创建一个新的Server实例
  15. // listenAddr: 服务监听的地址
  16. // svc: 用于处理HTTP请求的业务逻辑服务实例
  17. // 返回值: 初始化好的Server实例和可能发生的错误
  18. func NewServer(listenAddr string, svc *services.Service) (*Server, error) {
  19. engine := gin.New()
  20. return &Server{
  21. engine: engine,
  22. listenAddr: listenAddr,
  23. svc: svc,
  24. }, nil
  25. }
  26. // Serve 启动HTTP服务并监听请求
  27. // 返回值: 服务停止时可能发生的错误
  28. func (s *Server) Serve() error {
  29. s.initRouters() // 初始化路由
  30. logger.Infof("start serving http at: %s", s.listenAddr)
  31. err := s.engine.Run(s.listenAddr)
  32. if err != nil {
  33. logger.Infof("http stopped with error: %s", err.Error())
  34. return err
  35. }
  36. logger.Infof("http stopped")
  37. return nil
  38. }
  39. // initRouters 初始化所有HTTP请求的路由
  40. //
  41. // 它主要用于配置和初始化与HTTP请求相关的所有路由,
  42. // 包括对象存储、包管理、存储管理、缓存管理和存储桶管理等。
  43. func (s *Server) initRouters() {
  44. s.engine.GET(cdssdk.ObjectDownloadPath, s.Object().Download)
  45. s.engine.POST(cdssdk.ObjectUploadPath, s.Object().Upload)
  46. s.engine.GET(cdssdk.ObjectGetPackageObjectsPath, s.Object().GetPackageObjects)
  47. s.engine.POST(cdssdk.ObjectUpdateInfoPath, s.Object().UpdateInfo)
  48. s.engine.POST(cdssdk.ObjectMovePath, s.Object().Move)
  49. s.engine.POST(cdssdk.ObjectDeletePath, s.Object().Delete)
  50. s.engine.GET(cdssdk.PackageGetPath, s.Package().Get)
  51. s.engine.GET(cdssdk.PackageGetByNamePath, s.Package().GetByName)
  52. s.engine.POST(cdssdk.PackageCreatePath, s.Package().Create)
  53. s.engine.POST(cdssdk.PackageDeletePath, s.Package().Delete)
  54. s.engine.GET(cdssdk.PackageListBucketPackagesPath, s.Package().ListBucketPackages)
  55. s.engine.GET(cdssdk.PackageGetCachedNodesPath, s.Package().GetCachedNodes)
  56. s.engine.GET(cdssdk.PackageGetLoadedNodesPath, s.Package().GetLoadedNodes)
  57. // 存储管理相关路由配置
  58. s.engine.POST("/storage/loadPackage", s.Storage().LoadPackage) // 处理加载包请求
  59. s.engine.POST("/storage/createPackage", s.Storage().CreatePackage) // 处理创建包请求
  60. s.engine.GET("/storage/getInfo", s.Storage().GetInfo) // 处理获取存储信息请求
  61. // 缓存管理相关路由配置
  62. s.engine.POST(cdssdk.CacheMovePackagePath, s.Cache().MovePackage) // 处理移动包到缓存请求
  63. s.engine.GET(cdssdk.BucketGetByNamePath, s.Bucket().GetByName)
  64. s.engine.POST(cdssdk.BucketCreatePath, s.Bucket().Create)
  65. s.engine.POST(cdssdk.BucketDeletePath, s.Bucket().Delete)
  66. s.engine.GET(cdssdk.BucketListUserBucketsPath, s.Bucket().ListUserBuckets)
  67. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。