Skip to content

基础服务

Assets/RocPlay/Services 中通过 IRocService 暴露六类可解析服务,统一用 RocCenter.Resolve<接口>() 获取。生命周期为 Init / Start / Stop / Dispose(以接口定义为准)。主程序集 asmdef 名为 RocPlay

六项均有 总览 + 分册读序,但分册名与粒度按服务不同(例如存储仅 键值 + 示例,资源为 加载 / 门面 / 示例,消息队列为 入队 / 桥接与 EventBus / 示例);历史叙述见 Docs/99-Archive/Services/DocsPublish/Phase2/Services/,事实以 Assets/RocPlay/Services 与本站为准。


最小心智模型

  1. 先 Bootstrap 再 Resolve:服务由 RocBootstrap 与规划器统一 Init / Start,业务只 RocCenter.Resolve<T>(),勿手写服务生命周期。
  2. 六契约是「基础设施」:资源、存储、网络、队列、对象池;与 IRocManagerIRocPlugin 分层配合。
  3. 实现可替换:默认实现带 [RocImplementation(..., Priority = 0)];扩展可用更高 Priority 覆盖(尤其 IRocResourceService)。
  4. HTTP 不是 IRocService:短连用 RocHttpUtilsHTTP);长连 TCP 服务 / WebSocket 服务
  5. 引导顺序:在 RocBootstrap 中,Services 先于 Managers 与 Plugins 完成启动期的 Init / Start

六项 IRocService 索引

#接口默认实现(均带 [RocImplementation]说明
1IRocResourceServiceRocResourceServiceResources资源服务
2IRocStorageServiceRocStorageService存储服务
3IRocTcpServiceRocTcpServiceTCP 服务
4IRocWebSocketService条件编译下 RocWebSocketServiceRocWebSocketWebGlServiceWebSocket 服务
5IRocMessageQueueServiceRocMessageQueueService + 桥接 Update消息队列
6IRocPoolServiceRocPoolService对象池

与引导顺序的关系

RocBootstrap 中,Services 先于 Managers 与 Plugins 完成启动期的 Init / Start


常见搭配(非上述六契约)

  • HTTP 短连RocHttpUtilsRocPlay.Utils.Http),不是 IRocService。专页 HTTP(含与 Tcp/WebSocket 分工表)。
  • Task 主线程/超时/重试RocTaskHelperRocPlay.Utils.TaskHelper),静态工具,见 Task增强
  • 更高级资源:可在扩展中提供更高 PriorityIRocResourceService 实现(例如 Addressables 扩展),通过 [RocImplementation] 覆盖默认 Resources 实现。

使用方式(共性)

  • 实现 IRocServiceInit / Start / Stop / Dispose)。
  • 对管理器与插件提供基础设施,典型写法:
csharp
var ws = RocCenter.Resolve<IRocWebSocketService>();
// 具体方法以接口为准

IRocService 与生命周期

六项服务均继承 IRocServiceIRocLifecycle + IDisposable

阶段方法典型用途
注册后首次拉起Init()读配置、建内部状态,假设其他服务已 Start 完毕
启动完成Start()开始对外提供服务(监听、桥接 Update 等)
关服/切场景前Stop()停监听、刷盘、与 Start 对称收束
释放Dispose()释放原生句柄、取消订阅

业务侧一般只 RocCenter.Resolve<T>() 取接口并调用成员方法;不要在业务里手动调服务的 Init/Start(由 RocBootstrap + 规划器统一调用)。


下一步

  • 管理器层:六种内置 IRocManager 总览与 UI / Audio / Scene / Input / Data / Pool 分册。