本文档介绍如何通过 GNA Android SDK 实现网络加速。
游戏网络加速 GNA 可以在游戏客户端和游戏服务端之间加速网络数据传输。
您可以参见 工作原理 了解火山引擎游戏网络加速(GNA)如何对玩家的网络进行加速。
您已经导入和初始化了 GNA Android SDK。
参见以下步骤实现网络加速。您可以参见 SDK 参考 了解 SDK 的详细信息。
导入以下类。
import com.bytedance.gsdk.ttnet.mpa.TTNetMpaService; import com.bytedance.gsdk.frameworks.baselib.network.http.cronet.mpa.IMpaService;
调用 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 { // 因为某些内部错误导致加速中止 } } } );
调用 init
方法初始化网络加速功能。
TTNetMpaService.getInstance().init();
调用 start
方法开始网络加速。
TTNetMpaService.getInstance().start("your_start_log");
调用 setAccAddress
方法设置网络加速的目标地址。
注意
onFinish
回调后再与游戏服务端建立连接。否则可能出现数据丢失。同时,您还要增加超时机制。否则,如果回调在较长时间内没有返回,会阻塞与游戏服务端建立连接。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);
加速完成后,调用 stop
方法关闭加速。
TTNetMpaService.getInstance().stop("your_end_log");