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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // 对象存储相关路由配置
  45. s.engine.GET(cdssdk.ObjectDownloadPath, s.Object().Download) // 处理对象下载请求
  46. s.engine.POST(cdssdk.ObjectUploadPath, s.Object().Upload) // 处理对象上传请求
  47. s.engine.GET(cdssdk.ObjectGetPackageObjectsPath, s.Object().GetPackageObjects) // 处理获取包内对象请求
  48. // 包管理相关路由配置
  49. s.engine.GET(cdssdk.PackageGetPath, s.Package().Get) // 处理获取包信息请求
  50. s.engine.POST(cdssdk.PackageCreatePath, s.Package().Create) // 处理创建包请求
  51. s.engine.POST("/package/delete", s.Package().Delete) // 处理删除包请求
  52. s.engine.GET("/package/getCachedNodes", s.Package().GetCachedNodes) // 处理获取缓存节点请求
  53. s.engine.GET("/package/getLoadedNodes", s.Package().GetLoadedNodes) // 处理获取已加载节点请求
  54. // 存储管理相关路由配置
  55. s.engine.POST("/storage/loadPackage", s.Storage().LoadPackage) // 处理加载包请求
  56. s.engine.POST("/storage/createPackage", s.Storage().CreatePackage) // 处理创建包请求
  57. s.engine.GET("/storage/getInfo", s.Storage().GetInfo) // 处理获取存储信息请求
  58. // 缓存管理相关路由配置
  59. s.engine.POST(cdssdk.CacheMovePackagePath, s.Cache().MovePackage) // 处理移动包到缓存请求
  60. // 存储桶管理相关路由配置
  61. s.engine.POST(cdssdk.BucketCreatePath, s.Bucket().Create) // 处理创建存储桶请求
  62. s.engine.POST(cdssdk.BucketDeletePath, s.Bucket().Delete) // 处理删除存储桶请求
  63. }

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