一、適用場景
適用于出貨區(qū)域預先不確定,且需要對設(shè)備/服務(wù)器做分區(qū)管理的場景(如全球化部署、跨區(qū)域服務(wù)隔離等)。
二、部署策略
每個區(qū)域需獨立部署P2P服務(wù)器,且該區(qū)域的P2P服務(wù)器需掛載目標VPG(UID群組),部署架構(gòu)可參考下圖:

P2P分區(qū)部署架構(gòu)示意圖
架構(gòu)說明:
- VPG1、VPG2 為目標設(shè)備群組(對應(yīng)唯一UID標識);
- P_CN、P_ASIA、P_EU、P_US 分別為中國、亞太、歐洲、美洲區(qū)域的P2P服務(wù)器;
- M_CN、M_ASIA、M_EU、M_US 分別為對應(yīng)區(qū)域的Master服務(wù)器。
核心部署步驟:
- 將VPG1/VPG2分別配置到4個區(qū)域的P2P服務(wù)器(綁定至對應(yīng)分區(qū));
- 各區(qū)域P2P服務(wù)器僅配置本區(qū)域的Master服務(wù)器,避免跨區(qū)域依賴;
- APP配網(wǎng)時,根據(jù)自身定位(GPS/IP)將區(qū)域信息發(fā)送至設(shè)備;
- 設(shè)備持久化保存區(qū)域信息,后續(xù)登錄均使用該區(qū)域的服務(wù)器;
- APP保存設(shè)備綁定的區(qū)域信息,后續(xù)連線均定向至該區(qū)域的P2P服務(wù)器。
三、服務(wù)器配置
P2P服務(wù)器需通過環(huán)境變量配置區(qū)域?qū)傩裕韵聻橥ㄓ脝幽_本示例(Shell):
#!/bin/bash
export P2P_LICENSE_KEY= #填寫申請好的P2P License Key
export P2P_SERVER_KEY= #填寫申請好的Server Key
export P2P_SERVICE_REGION=all #設(shè)定需要服務(wù)的區(qū)域,可選值:'asia', 'us', 'eu', 'cn', 'all'
export P2P_LOCAL_REGION=non-cn #P2P服務(wù)器物理區(qū)域,可選值:'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
四、區(qū)域設(shè)定方法
1. APP給設(shè)備設(shè)定區(qū)域
根據(jù)設(shè)備添加方式差異化傳輸區(qū)域信息:
- BLE配網(wǎng):將區(qū)域編碼(如eu/cn/us)嵌入BLE廣播數(shù)據(jù)中傳輸;
- WiFi配網(wǎng):在配網(wǎng)指令中攜帶區(qū)域標識字段;
- 有線配網(wǎng):通過首次登錄指令同步區(qū)域信息。
2. 設(shè)備設(shè)定登錄區(qū)域
設(shè)備需在初始化SDK前指定登錄區(qū)域,核心代碼示例:
// 指定區(qū)域為歐洲區(qū)(EU),必須在IOTC_Initialize2之前調(diào)用
TUTK_SDK_Set_Region_Code(REGION_STRING_EU);
3. APP設(shè)定連線區(qū)域
3.1 SDK 4.3.3以下版本
僅支持全局區(qū)域設(shè)定,所有設(shè)備均使用該區(qū)域連線:
// 全局設(shè)定連線區(qū)域為EU,需在IOTC_Initialize2之前調(diào)用
TUTK_SDK_Set_Region_Code(REGION_STRING_EU);
3.2 SDK 4.3.3以上版本
支持按設(shè)備單獨指定連線區(qū)域,核心代碼示例:
IOTCConnectInput input;
memset(&input, 0, sizeof(input));
input.cb = sizeof(input);
input.authentication_type = AUTHENTICATE_BY_KEY;
strcpy(input.auth_key, "00000000");
// 填寫設(shè)備綁定的區(qū)域(與設(shè)備登錄區(qū)域一致)
strcpy(input.device_region, REGION_STRING_EU);
input.timeout = 10;
// 定向連接指定區(qū)域的設(shè)備
IOTC_Connect_ByUIDEx(uid, IOTC_Get_SessionID(), &input);
重要提示
APP設(shè)定的連線區(qū)域必須與設(shè)備登錄區(qū)域完全一致,否則可能會導致連接失敗。
