You need to enable JavaScript to run this app.
导航

实现网络加速(Android)

最近更新时间2024.02.20 10:53:40

首次发布时间2023.04.28 09:58:13

本文档介绍如何通过 GNA Android SDK 实现网络加速。
游戏网络加速 GNA 可以在游戏客户端和游戏服务端之间加速网络数据传输。
您可以参见 工作原理 了解火山引擎游戏网络加速(GNA)如何对玩家的网络进行加速。

前提条件

您已经导入和初始化了 GNA Android SDK

实现步骤

参见以下步骤实现网络加速。您可以参见 SDK 参考 了解 SDK 的详细信息。

  1. 导入以下类。

    import com.bytedance.gsdk.ttnet.mpa.TTNetMpaService;
    import com.bytedance.gsdk.frameworks.baselib.network.http.cronet.mpa.IMpaService;
    
  2. 调用 registerCallbacks 方法按顺序注册以下回调:

    • onFinish:报告初始化结果
    • ISetAddressCallback:报告加速目标地址设置结果
    • onFinish:报告加速是否成功
    // 不要在 callback 中执行耗时操作
    TTNetMpaService.getInstance().registerCallbacks(
        // 报告初始化结果
          new IMpaService.ICallback() {
             @Override
             public void onFinish(boolean isSuccess, String extraMsg) {
                if (isSuccess) {
                   // 初始化成功
                } else {
                   // 初始化失败
                }
             }
          },
          // 报告加速目标地址设置结果
          new IMpaService.ISetAddressCallback() {
             @Override
             public void onFinish(boolean isSuccess, String extraMsg, String context) {
                if (isSuccess) {
                   // 设置加速目标地址成功。游戏客户端开始与游戏服务端建连并发送数据
                } else {
                   // 设置加速目标地址失败。游戏客户端开始与游戏服务端建连并发送数据。数据不经过加速链路
                }
             }
          },
          // 报告加速是否成功
          new IMpaService.ICallback() {
             @Override
             public void onFinish(boolean isSuccess, String extraMsg) {
                if (isSuccess) {
                   // 此次加速成功
                } else {
                   // 因为某些内部错误导致加速中止
                }
             }
          }
    );
    
  3. 调用 init 方法初始化网络加速功能。

    TTNetMpaService.getInstance().init();
    
  4. 调用 start 方法开始网络加速。

    TTNetMpaService.getInstance().start("your_start_log");
    
  5. 调用 setAccAddress 方法设置网络加速的目标地址。

    注意

    • 您必须在接收到 onFinish 回调后再与游戏服务端建立连接。否则可能出现数据丢失。同时,您还要增加超时机制。否则,如果回调在较长时间内没有返回,会阻塞与游戏服务端建立连接。
    • 如果您分别使用两个线程发送和接收数据,需要先执行发送线程,再执行接收线程,否则会出现接收线程卡死。
    • 如果 App 在加速时发生重连并且目标地址的 IP 或端口发生变化,您需要在 App 再次重连之前先调用 setAccAddress 方法更新加速目标地址。
    • 如果您在调用 start 方法之前调用 setAccAddress 方法,GNA SDK 会在start 方法调用完成后触发一次回调。context 为最后一次调用 setAccAddress 时传入的 context
    • 如果您在调用 start 方法之后调用 setAccAddress 方法,每次调用 setAccAddress 方法都会触发一次回调。上下文为每次调用时传入的 context 参数。
    • 如果您需要全量更新加速地址,则您需要把 append 参数设为 false;如果您需增量更新加速地址,则您需要把 append 参数设为 true。
    TTNetMpaService.AcceleratedPointsParams acceleratedPointsParams = new TTNetMpaService.AcceleratedPointsParams();
    List<String> address = new ArrayList<>();
    address.add("1.1.1.1:8080");
    address.add("2.2.2.2:8888");
    acceleratedPointsParams.addressList = address;
    acceleratedPointsParams.append = false;
    acceleratedPointsParams.context = "your_context_id";
    TTNetMpaService.getInstance().setAccAddress(acceleratedPointsParams);
    
  6. 加速完成后,调用 stop 方法关闭加速。

    TTNetMpaService.getInstance().stop("your_end_log");
    

接下来您可以

查看统计数据