[GGH4.X-5.X] 数台の GGEasyMonitor を設置するが,順番にチェックを行い生きているサーバーで振分けるようにしたい.
技術ノート
2016/08/01
[番号]
技術ノート KGTN 2016071301
[現象]
[GGH4.X-5.X] 数台の GGEasyMonitor を設置するが,順番にチェックを行い生きているサーバーで振分けるようにしたい.
[説明]
GGEasyMonitor のバージョン 2.0.11 から画像 (ロゴ) を表示する機能が追加されましたので,順番にこの画像の読み込みを行い,その成否で死活チェックを行います.生きている GGEasyMonitor が見つかった段階で,その GGEasyMonitor に振り分け処理を任せます.このサンプルコードを以下に示します.なお,このファイル (logon.html) は,他のウエッブサーバー上に配置して下さい.
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;shift_jis" http-equiv="Content-Type">
<title>Logon</title>
</head>
<body>
<!--- ステータス表示用 --->
<br><br><br>
<font size="+2">
<div id="status" align="center"></div>
</font>
<!--- 接続処理を行うスクリプト --->
<script language=javascript>
var iDebug = 0;
var iServer = 0;
var serverTab = new Array();
var objMsg = document.getElementById("status");
serverTab[iServer++] = new serverInfo('192.168.102.99',491);
serverTab[iServer++] = new serverInfo('192.168.102.88',491);
serverTab[iServer++] = new serverInfo('192.168.102.89',491);
findServer(0);
// サーバー情報のクラス
function serverInfo(addr,port)
{
this.addr = addr;
this.port = port;
}
// サーバー選択処理
function findServer(iNext)
{
var image;
var src;
// 全てチェック済か?
if(iNext >= iServer)
{
showMessage('アクセス可能なサーバーがありません!');
return;
}
// イメージの読込みで死活チェック
image = new Image(0,0);
// 成功時の処理
image.onload = function myOnLoad()
{
var params = location.search;
var target = '';
params = params.substring(1);
if(params.length == 0)
{
params = 'dummy=dummy';
}
target = 'http://' + serverTab[iNext].addr + '/goglobal/logon.html'
+ '?host=' + serverTab[iNext].addr
+ '&port=' + serverTab[iNext].port
+ '&' + params;
showMessage('振分けサーバー ' + serverTab[iNext].addr + ' にアクセス中です...');
if(iDebug > 0)
{
alert('Connect[' + (iNext+1) + ']: ' + target)
}
else
{
location.href = target;
}
};
// 失敗時の処理
image.onerror = function myOnError()
{
objMsg.textContent = '';
findServer(++iNext);
};
// 画像の読込み
src = 'http://' + serverTab[iNext].addr + ':8089/logo.jpg';
showMessage('振分けサーバー ' + serverTab[iNext].addr + ' を確認中です...');
image.src = src;
}
// メッセージ表示
function showMessage(msg)
{
objMsg.innerHTML = msg;
}
</script>
</body>
</html>