一、概述
TUTK P2P SDK从3.1.10版本开始,新增了区域设定的API,用以限制APP或者设备只访问指定区域的服务器,实现区域化管理和合规要求(如GDPR)。
1. 支持的分区类型
目前TUTK官方支持的区域划分:
- 中国区:CN
- 北美区:US
- 欧洲区:EU
- 亚洲区:ASIA(不含中国区)
2. 架构对比

图1:默认全区架构示意图(APP/设备可访问所有区域服务器)
全区架构下,APP或设备将自动匹配并访问所有区域的服务器,适用于无区域限制的全球化部署场景。

图2:分区架构示意图(APP/设备仅访问指定区域服务器)
分区架构下,APP或设备通过API指定区域后,仅会访问该区域的P2P服务器和对应Master服务器,实现区域隔离。
合规说明
若需符合GDPR(通用数据保护条例)要求,需将P2P服务器、APP端、设备端的区域统一设定为欧洲区(EU),确保数据仅在欧洲区域内传输和存储。
二、P2P服务器的分区设定
通过配置P2P服务器启动脚本中的 P2P_SERVICE_REGION 字段,指定服务器提供服务的目标区域。
启动脚本配置(bash):
#!/bin/bash
export P2P_LICENSE_KEY= #填写申请好的P2P License Key
export P2P_SERVER_KEY= #填写申请好的Server Key
export P2P_SERVICE_REGION=all #设定需要服务的区域,可选值:'asia', 'us', 'eu', 'cn' 或 'all'
export P2P_LOCAL_REGION=non-cn #P2P服务器物理区域,可选值:'cn'(中国区)或 'non-cn'(非中国区)
CUR_DIR=$(cd `dirname $0`; pwd) #获取程序运行目录(用于开机重启路径配置)
s=1
while [ "$s" != "0" ]
do
if [ $(ps -A | grep -c 'IOTC_Server') == "0" ]; then
${CUR_DIR}/IOTC_Server --config=${CUR_DIR}/config.db -gP:G -p10001 &
fi
sleep 5
done
配置说明:
- P2P_SERVICE_REGION:指定服务器服务的区域,例如欧洲区服务器填写 eu,需与APP/设备端设定的区域一致;
- P2P_LOCAL_REGION:服务器物理部署区域,仅区分 cn 和 non-cn,用于网络优化;
- -gP:G:替换为实际的VPG标识(VID:PID:GID组合),绑定目标设备群组。
三、APP和设备端的区域设定
APP和设备端通过SDK提供的专用API设定区域,需根据SDK版本选择对应接口,且区域设定必须在SDK初始化前完成。
(一)API定义
1. SDK 4.3.3以下版本(APP端+设备端通用)
#include "TUTKGlobalAPIs.h"
/**
* @brief 设定区域编码(全局生效)
* @param region 区域字符串(SDK预定义常量)
* @return 0:成功,非0:失败
*/
TUTK_GLOBAL_APIs int32_t TUTK_SDK_Set_Region_Code(const char * region);
2. SDK 4.5.0以上版本(区分APP端和设备端)
// 设备端API(与低版本兼容)
#include "TUTKGlobalAPIs.h"
TUTK_GLOBAL_APIs int32_t TUTK_SDK_Set_Region_Code(const char * region);
// APP端API(支持单设备精准设定)
#include "IOTCAPIs.h"
/**
* @brief 带区域设定的P2P连线接口
* @param cszUID 目标设备UID
* @param SID 会话ID(通过IOTC_Get_SessionID()获取)
* @param connectInput 连线参数(含区域信息)
* @return 0:成功,非0:失败
*/
int32_t IOTC_Connect_ByUIDEx(const char * cszUID, int32_t SID, IOTCConnectInput* connectInput);
区域常量说明:
SDK预定义区域字符串常量,直接调用无需手动输入:
- REGION_STRING_CN:"cn" //中国区
- REGION_STRING_US:"us" //北美区
- REGION_STRING_EU:"eu" //欧洲区
- REGION_STRING_ASIA:"asia" //亚洲区(不含中国)
(二)代码示例
1. 设备端示例(所有SDK版本通用):
// 步骤1:设定区域(必须在IOTC_Initialize2之前调用)
TUTK_SDK_Set_Region_Code(REGION_STRING_EU); // 设定为欧洲区
// 步骤2:初始化SDK
IOTC_Initialize2(SDK_LICENSE_KEY);
// 后续执行设备相关逻辑
