Group Lines - 路由群組最佳化指南
概述
使用 testLine 和 getGroupResult 方法高效管理多條服務器路線,確保資源分配到性能最佳的服務器,並實現動態路由優化。
⚠️ 注意事項
- 當返回值為空字串 (
""),務必實作備換機制,以避免錯誤或服務中斷。 - 返回結果 (
result) 中的每條路線均必須進行測試,確保其可用性。如果路線不可用,請切換至其他可用路線,或實作備換機制。 type和group參數必須和前面通過testLine配置過的群組名稱相符,否則可能無法正確取得性能資料。
testLine( type, group, lines ) - 建立路由群組
描述
testLine 方法用於建立指定群組名稱的新路由群組。這是整個動態路由優化的起點。
語法
javascript
import JBLWebSocket from '@/assets/js/jbl.es.js';
const authorizationKey = '${Product authorization key}';
JBLWebSocket.connect(authorizationKey);
JBLWebSocket.testLine(type, group, lines);參數說明
| 參數 | 類型 | 描述 |
|---|---|---|
type | String | 必填 指定類型,選項為 site 或 3r,分別對應網站或第三方服務。 |
group | String | 必填 群組名稱,用於識別路由群組。 |
lines | String | 必填 服務器路線位址,格式為逗號分隔的字串 (例:api.dome1.com,api.dome2.com) |
範例
javascript
// 建立一個名為 "Group1" 的路由群組,包含兩條服務器路線
JBLWebSocket.testLine('site', 'Group1', 'api.dome1.com,api.dome2.com');
// 為第三方服務設定類型
JBLWebSocket.testLine('3r', 'ThirdPartyGroup', 'api.thirdparty.com,api.backup.com');getGroupResult( type, group ) - 獲取最佳路線
描述
getGroupResult 方法用於獲取指定 type 和 group name 的最新服務器路線性能數據(速度和使用情況)。這是動態選擇最佳路線的關鍵步驟。
為何先執行 testLine 再調用 getGroupResult?
在調用 getGroupResult 之前,必須先執行 testLine。這樣可以確保服務器已經初始化並填充路由群組。否則,getGroupResult 可能會返回空數據或過時的結果。
jblResult如何透過WebSocket自動更新?
當 JBLWebSocket.getGroupResult(type, group) 被調用時,它返回的是一個物件的引用,而不是一個靜態值。 WebSocket 會在內部持續更新這個物件,這意味著即使開發者沒有手動監聽 WebSocket 事件,jblResult 依然會自動接收即時更新。 這讓開發者可以直接存取 jblResult,而不需要重複調用 getGroupResult() 來手動刷新數據。
語法
javascript
import JBLWebSocket from '@/assets/js/jbl.es.js';
const authorizationKey = '${Product authorization key}';
await JBLWebSocket.connect(authorizationKey);
JBLWebSocket.testLine(type, group, lines);
let jblResult = await JBLWebSocket.getGroupResult('site', 'Group1');參數說明
| 參數 | 類型 | 描述 |
|---|---|---|
type | String | 必填 指定類型,選項為 site 或 3r,分別對應網站或第三方服務。 |
group | String | 必填 群組名稱,用於識別路由群組。 |
基本範例
javascript
import JBLWebSocket from '@/assets/js/jbl.es.js';
const authorizationKey = ${Product authorization key};
// 建立 WebSocket 連接
JBLWebSocket.connect(authorizationKey);
// 建立一個名為 "Group1" 的路由群組,包含兩條服務器路線
JBLWebSocket.testLine('site', 'Group1', 'api.dome1.com,api.dome2.com');
// 獲取 `jblResult`,它保持對 WebSocket 內部數據的引用
let jblResult = await JBLWebSocket.getGroupResult('site', 'Group1');
// 即使沒有手動監聽 WebSocket 事件,
// `jblResult` 也是對 WebSocket 內部數據的引用。
// 任何 WebSocket 推送的更改都會直接更新 `jblResult`。
console.log('初始化的最佳服務器路線:', jblResult);
// 示例輸出: { site_Group1: 'api.dome1.com' }🔍 WebSocket 群組路由更新機制
1️⃣ 群組初始化與首次更新延遲
- 如果服務器沒有現有的群組配置,則必須先通過
testLine發送群組設置。 testLine發送後,服務器大約需要一分鐘才能完成結果更新並在getGroupResult中獲取到最新的數據。- 在此等待期間,任何對
getGroupResult()的調用都可能返回空數據,直到首次更新循環完成。
2️⃣ 數據過期的自動重置
- 如果服務器長時間未接收到指定群組的新數據,則會自動清除結果。
- 這可以防止過時或不準確的路由信息,並在有新數據時重新計算最佳路線。
3️⃣ 每分鐘自動更新機制
- 服務器每分鐘更新一次群組結果,確保獲取最新的路由數據。
- 如果在一分鐘內沒有新的更新,服務器會自動清除結果,直到接收到新數據。
- 如果在一分鐘內有更新,則保留最新的路由數據,並通過
getGroupResult()獲取。
結果處理與備換機制
當返回值為空字串時,您需要實作自己的備換機制,以避免潛在的錯誤。例如:
javascript
let jblResult = await JBLWebSocket.getGroupResult('site', 'Group1');
if (!jblResult || !jblResult.site_Group1) {
console.error('沒有可用的服務器路線,請實作備換機制。');
// 在這裡添加您的備換邏輯
} else {
console.log(`最佳路線:${jblResult.site_Group1}`);
// 測試該路線的可用性
const fetchTestLine = async (url) => {
try {
const response = await fetch(url, { method: 'HEAD' });
return response.ok;
} catch (err) {
console.error(`${url} 測試失敗:`, err);
return false;
}
};
const isAvailable = await fetchTestLine(jblResult.site_Group1);
if (!isAvailable) {
console.error('主路線不可用,正在切換到備換路線...');
// 在這裡添加您的備換邏輯
}
}這樣的重組更聚焦技術要點,同時也讓整體結構更加流暢!🚀 如果還有需要調整的地方,隨時說!