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");
    

接下来您可以

查看统计数据