高级配置

本文介绍HarmonyOS SDK的一些高级配置。

IP优选配置

当一个域名有多个IP节点时,可以考虑配置IP优选,使SDK根据每个IP的连接速度进行排序,使应用尽量使用最快的IP节点。

示例代码如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '这里需要替换为阿里云HTTPDNS控制台的Account ID'
        
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* IP优选配置 begin *************
      hostConfigsForIpRanking: [{
        host: 'www.aliyun.com',
        port: 80
      }]
      // ************* IP优选配置 end *************
    })
  }
  // 省略其它代码
}

hostConfigsForIpRanking的host字段指定哪个域名的解析结果进行IP优选。

hostConfigsForIpRanking的port字段指定使用哪个端口进行连接测速。

固定IP配置

当网络发生切换时,SDK内部会清除缓存,并根据是否开启网络变化自动解析配置决定是否触发自动解析。

当固定IP配置了域名之后,指定域名的解析结果会被认为是固定的,在网络切换时,不会清除缓存,也不会触发自动解析。

配置代码示例如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns } from '@aliyun/httpdns';

const ACCOUNT_ID = '这里需要替换为阿里云HTTPDNS控制台的Account ID'
        
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 固定IP配置 begin *************
      hostsWithFixedIp: ['www.aliyun.com']
      // ************* 固定IP配置 end *************
    })
  }
  // 省略其它代码
}

自定义TTL配置

默认情况下,SDK缓存的TTL时间,是根据DNS服务器的TTL时间计算的。

在部分场景下,如果应用想要修改SDK缓存的TTL时间,可以通过自定义TTL配置实现。

示例代码如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns, ICacheTtlCustomizer, IpType } from '@aliyun/httpdns';

const ACCOUNT_ID = '这里需要替换为阿里云HTTPDNS控制台的Account ID'
        
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    httpdns.configService(ACCOUNT_ID, {
      context: this.context,
      // ************* 自定义TTL配置 begin *************
      ttlCustomizer: new CustomTtl()
      // ************* 自定义TTL配置 end *************
    })
  }
  // 省略其它代码
}

// ************* 自定义TTL实现 begin *************
class CustomTtl implements ICacheTtlCustomizer {
  getCacheTtlInSec(host: string, type: IpType, serverTtlInSec: number): number {
    if (host === 'www.aliyun.com') {
      return 10 * 60;
    }
    return serverTtlInSec;
  }
}
// ************* 自定义TTL实现 end *************

初始化配置中ttlCustomizer字段用于指定自定义TTL的实现。

自定义的TTL实现仅需要一个getCacheTtlInSec方法,用于SDK缓存解析结果时获取自定义的TTL时间。

在这个方法中,可以像示例代码一样,针对需要的域名返回定制的TTL时间。