Unreal Engine

c/s模式连接流程

记录了学习c/s链接的流程,以及和ue的网络关联起来

================================================================================

              UE4 客户端-服务器完整网络流程 总结

================================================================================

 

流程总览:

  建立连接(握手)→ 引擎层调度 → 数据分流与传输

 

================================================================================

 

一、建立连接(握手)

--------------------------------------------------------------------------------

1. 客户端通过 UEngine::Browse() 向服务器发起连接。

2. 服务器接收后,双方各自创建 UNetConnection。

3. 握手在服务器端对应的新建 UNetConnection 上完成。

4. 同时,该连接的 Control Channel 已经随之启动,负责管理接下来的

   Actor 创建、关卡同步等所有全局事件。

 

二、引擎层调度

--------------------------------------------------------------------------------

1. 服务器端的 UNetDriver 每帧决定:

   - 哪些 Actor 需要复制

   - 发给哪些客户端

   - 优先级排序

2. UNetDriver 管理着服务器上所有 ClientConnections(一对多)。

3. 客户端只有一个指向服务器的 ServerConnection(一对一)。

 

三、数据分流与传输

--------------------------------------------------------------------------------

1. Control Channel:

   - 管理全局事件(Actor 创建/销毁、关卡流送等)

   - 是连接的“元老通道”,握手阶段就已存在

 

2. UActorChannel:

   - 为每个开启复制的 Actor 单独创建

   - 专门负责该 Actor 的属性同步和 RPC 调用

 

3. Bunch 打包与可靠性:

   - 通道有数据要发时,将数据打包成 Bunch

   - 标注可靠或不可靠传输

   - 可靠传输通过确认/重传机制保障

 

4. 最终传输:

   - Bunch 交由底层的 UNetConnection 通过 UDP 发出

 

================================================================================

 

核心关系:

  UNetDriver(调度)

      ↓

  UNetConnection(连接)

      ↓

  UChannel(分流:Control / Actor / Voice …)

      ↓

  Bunch(数据块)

      ↓

  UDP 数据包(网络传输)

 

服务器-客户端不对称性:

  服务器:UNetDriver → ClientConnections 列表(一对多)

  客户端:UNetDriver → ServerConnection 单连接(一对一)

 

================================================================================