WebSocket 通信サブシステム
WebSocket (WS) 通信サブシステムはコア WS 通信を処理します。
コンフィギュレーション
バインド保護の設定
設定
ベースタイプ
デフォルト
注記
バインド保護のポリシー
STRING
First-in-wins
必要なバインド保護のポリシーをメニューから選択します。デフォルトでは、このポリシーは First-in wins です。このポリシーでは、すでにバインドされている Edge デバイスから新規バインドの試みをプラットフォームが受信した場合、プラットフォームは新規バインドの試みを拒否します。
Last-in wins ポリシーでは、プラットフォームはすでにバインドされているデバイスからの新規バインドの試みを拒否する代わりに、新規バインドを受け付けて、エッジへのメッセージの送信方法に関するルーティング規則を更新します。
WebSocket 通信の設定
設定
ベースタイプ
デフォルト
注記
アイドル接続タイムアウト (秒)
INTEGER
60
接続が確立されると、WebSocket 通信サブシステムは指定された秒数だけ待ってから、接続をシャットダウンします。アクティビティがある場合、アイドルタイマーがリセットされます。
アイドル Ping 速度 (秒)
INTEGER
45
ThingWorx は指定された秒数だけクライアントからの ping を待ちます。ping を受信すると、通信サイクルが継続します。
指定された秒数以内に ping リクエストに対する pong を受信しなかった場合、SDK は切断して再接続を試みます。切断によってソケット、ThingWorx 接続、WebSocket 接続、TLS 接続、OS レベルのソケットが閉じます。再接続によってこれらの接続レイヤーの新しいバージョンが作成されます (認証の各レイヤーが成功した場合)。
認証メッセージの待機時間 (秒)
INTEGER
15
接続が確立された後、リモートサーバーは指定された時間だけ認証を待機します。認証を受信しなかった場合、ソケットはシャットダウンします。
応答メッセージがタイムアウトになるまでに待機する時間 (秒)
INTEGER
30
サーバーがオンラインの状態でリクエストが失敗した場合、エラーが発生します。サーバーがオフラインの場合、サーバーが再びオンラインになるまでリクエストはキューに入ります。
メッセージまたはトンネルトラフィックの送信後に ping を送信
BOOLEAN
True
メッセージがクライアントからプラットフォームに送信された後で ping を送信します。この設定は接続が作成される際に適用されます。
非同期コンフィギュレーションの設定
設定
ベースタイプ
デフォルト
注記
最大スレッド数
NUMBER
10
エッジデバイスへのイグレス通信に使用されます。Remote Thing との通信に使用可能なスレッドの数を指定します。イグレス通信の例としては、Remote Thing に対するリモートサービスの実行があります。指定された値をリクエストが上回るとそれらのリクエストはキューに送信されます。
クライアントエンドポイントの設定
設定
ベースタイプ
デフォルト
注記
エンドポイント名
STRING
該当なし
ユーザー定義の名前
エンドポイント URI
STRING
該当なし
フェデレーション先のリモートサーバーの URI
最大エンドポイント接続
INTEGER
1
リモートサーバーに対してオープンにする接続の数
アイドル Ping 速度 (秒)
INTEGER
45
2 台のサーバーをフェデレーションする場合に使用します。「アイドル ping 速度」では、サーバーがリモートサーバーに ping を送信する頻度を指定します。中間システムがサーバーがアイドルであることを理由にサーバーをシャットダウンしないように接続をアクティブな状態に維持し、接続がアイドルであることを理由にリモートサーバーが接続をシャットダウンしないようにします。
アプリケーションキー
PASSWORD
該当なし
「パスワードを変更」ボタンをクリックすると、「パスワードを変更」画面が表示されます。ここで、新しいアプリケーションキーを入力できます。
サービス
WSCommunicationsSubsystem のサービスを使用することで、管理者は ThingWorx Platform に接続されている AlwaysOn WebSocket に対してクエリーしたりこれを閉じたりすることが可能になります。
* 
WSCommunicationsSubsystem のサービスを使用することは管理者だけに許可されています。
Remote Thing に加えてプラットフォームに何が現在接続されているか確認する場合、以下の手順に従います。
1. QueryEndpointSessions サービスを実行して、指定されているエンドポイントにバインドされている Thing の数、および現在開いている接続の数を取得します。このサービスの詳細については、以下の表を参照してください。
2. GetBoundThingsForEndpoint サービスを実行して、どの Thing がどのエンドポイントにバインドされているかを調べます。このサービスの詳細については、以下の表を参照してください。
3. 特定の接続のセキュリティが侵害された場合や、その他の理由でシャットダウンしなければならない場合、CloseEndpointSessions サービスを実行して接続を閉じます。
* 
アプリケーションキーが期限切れになっているデバイスを切断する CloseEndpointSessions サービスを一定間隔でトリガーすることもできます。アプリケーションキーが期限切れになっているデバイスを識別してその接続を終了するサンプルスクリプトを以下に示します。

// This script is for informational and example purposes only, and you must
// configure/validate it to ensure that it meets your functional and security requirements.

// result: INFOTABLE dataShape: ""
var expiredKeysTable = Subsystems["UserManagementSubsystem"].GetApplicationKeyExpirationInfo({
expiredKeys: true /* BOOLEAN */ ,
unexpiredKeys: false /* BOOLEAN */
});

// Create InfoTable from EntityList DataShape
var params = {
infoTableName: "InfoTable",
dataShapeName: "EntityList"
};

// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(EntityList)
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);

for (var i = 0; i < expiredKeysTable.rows.length; i++) {
var expirationInfoTable = expiredKeysTable.rows[i].expirationInfo.rows;
for (var j = 0; j < expirationInfoTable.length; j++) {

// Add the name and key to result InfoTable
var newEntry = new Object();
newEntry.name = expirationInfoTable[j].name;// STRING [Primary Key]
result1 = Subsystems["WSCommunicationsSubsystem"].CloseEndpointSessions({
appKeyName: expirationInfoTable[j].name /* APPLICATIONKEYNAME */
});
logger.warn("Number of closed Sessions: " + result1);
logger.warn("Expired application keys: " + expirationInfoTable[j].name);
}
}
* 
CloseEndpointSessions サービスは、そのサービスが閉じたセッションで使用されているアプリケーションキーを失効させたり無効にしたりしません。特定のアプリケーションキーを使用しているデバイスを切断し、そのデバイスが再接続できないようにするには、最初にその有効期限を更新することでアプリケーションキーを強制的に期限切れにします。次に、このサービスを呼び出してセッションを閉じます。
CloseEndpointSessions サービスの詳細については、以下の表を参照してください。
サービス
説明
QueryEndpointSessions
このサービスはエンドポイントセッションにクエリーするときに以下のパラメータをとります。
authenticationType (STRING)
appKeyName (APPLICATIONKEYNAME)
userName (USERNAME)
startedBefore (DATETIME)
startedAfter (DATETIME)
lastUsedBefore (DATETIME)
lastUsedAfter (DATETIME)
hasBoundThings (BOOLEAN)
hasMultipleConnections (BOOLEAN)
maxItems (NUMBER)。結果数のデフォルト値は 500 です。
このサービスは、以下のフィールドを含む INFOTABLE を返します。
endpointId。セッション自体ではなく、エンドポイントの識別子。
authenticationType。"アプリケーションキー" や "ユーザー資格証明" など。
appKeyName アプリケーションキーの名前 (該当する場合)。
userContext。サービスが実行されたアカウントに関連付けられている名前。これらのすべてのサービスで、これは "管理者" になります。
startDate
lastUsedDate。ping を除く。
numberBoundThings。このエンドポイントを介してバインドされている Thing の数。
numberConnections。現在開いている接続の数。ThingWorx Connection Server または ThingWorx コネクタの場合、複数の接続が存在する場合があります。
GetBoundThingsForEndpoint
このサービスはエンドポイント ID をとります。このサービスを Composer UI から呼び出す場合、返す行の最大数をオプションで設定できます。これは INFOTABLE を返し、これには指定されているエンドポイントにバインドされている Thing の名前が、指定されている最大行数まで含まれています。
このサービスを使用することで、管理者は潜在的なメモリの問題に遭遇することなく、QueryEndpointSessions からの結果にこれらを含めることによって、どの Thing がどのエンドポイントにバインドされているかを調べることができます。
CloseEndpointSessions
このサービスは、エンドポイント ID か、QueryEndpointSessions サービスの maxItems を除くすべてのパラメータをとります。両方が指定されている場合、このサービスはエラーを返します。
このサービスは、基準を満たすすべてのセッションを閉じます。エンドポイントを指定する際には、QueryEndpointSessions サービスから返されたエンドポイント ID を使用します。
このサービスは、そのサービスが閉じたセッションで使用されているアプリケーションキーを失効させたり無効にしたりしません。このため、特定のアプリケーションキーを使用しているデバイスを切断し、そのデバイスが再接続できないようにする場合、最初にその有効期限を更新することでアプリケーションキーを強制的に期限切れにしてから、このサービスを呼び出してセッションを閉じる必要があります。
監査サブシステムが有効になっている場合、このサービスの呼び出しが監査されます。監査メッセージはカテゴリ DEVICE_COMMUNICATIONS に配置されます。監査サブシステムの詳細については、 監査サブシステムおよびその関連トピックを参照してください。