Composer 中的 ThingWorx 模型定义 > 系统 > 子系统 > WebSocket 通信子系统
WebSocket 通信子系统
WebSocket (WS) 通信子系统用于处理核心 WS 通信。
配置
绑定保护设置
设置
基本类型
默认
注解
绑定保护策略
STRING
First-in-wins
从菜单中选取所需的“绑定保护策略”。默认情况下,策略为 First-in wins。此策略表示如果平台接收到已绑定 Edge 设备的新绑定尝试,则平台会拒绝新的绑定尝试。
Last-in wins 策略表示不会拒绝已绑定设备的新绑定尝试,相反,平台应接受该新绑定,并更新发送至 Edge 的消息的路由规则。
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
用于为 Edge 设备的出口通信指定可与远程事物进行通信的线程数。 将在远程事物上执行远程服务的流出通信的示例。高于指定值的任何请求均会被发送到队列。
客户端端点设置
设置
基本类型
默认
注解
端点名称
STRING
不适用
用户定义的名称
端点 URI
STRING
不适用
要与之联合的远程服务器的 URI
最大端点连接数
INTEGER
1
向远程服务器开放的连接数
空闲 Ping 速率 (秒)
INTEGER
45
在联合两台服务器时使用。空闲 ping 速率指定服务器向远程服务器发送 ping 的频率。它可使连接处于活动状态,这样中间系统不会因为空闲而关闭服务器,并且可以防止远程服务器由于空闲而关闭连接。
应用程序密钥
PASSWORD
不适用
单击“更改密码”按钮时,“更改密码”屏幕随即出现。可在此处输入新的应用程序密钥。
服务
WSCommunicationsSubsystem 的服务允许管理员查询和关闭连接到 ThingWorx Platform 的 AlwaysOn Websocket。
* 
只有管理员可以使用 WSCommunicationsSubsystem 的服务。
如果要了解除远程事物之外当前连接到平台的内容,请按以下步骤进行操作:
1. 运行 QueryEndpointSessions 服务,以获取绑定到指定端点的事物数以及当前打开的连接数。有关此服务的详细信息,请参阅下表。
2. 运行 GetBoundThingsForEndpoint 服务,以确定事物要绑定到的端点。有关此服务的详细信息,请参阅下表。
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。与运行服务时所使用的帐户关联的名称。对于所有这些服务,此名称为 "Administrator"。
startDate
lastUsedDate。排除 ping。
numberBoundThings。绑定到此端点的事物数。
numberConnections。当前打开的连接数。对于 ThingWorx Connection Server 或 ThingWorx 连接器,可以有多个连接。
GetBoundThingsForEndpoint
此服务使用端点 ID。通过 Composer UI 调用此服务时,可以选择性地设置要返回的最大行数。它会返回 INFOTABLE,其中包含绑定到指定端点的事物的名称,该名称最长可达指定的最大行数。
此服务可供管理员确定将哪些事物绑定到哪些端点,而不会将其包含在 QueryEndpointSessions 的结果中而导致潜在的内存问题。
CloseEndpointSessions
此服务可采用端点 ID 或 QueryEndpointSessions 服务中的所有参数,但 maxItems 除外。如果将两者同时提供给服务,则会返回错误。
此服务会关闭与此条件匹配的所有会话。指定端点时,请使用由 QueryEndpointSessions 服务返回的端点 ID。
此服务不会过期,否则该服务关闭的会话所使用的任何应用程序密钥失效。因此,如果要使用给定的应用程序密钥断开设备连接并防止其重新连接,则应首先通过更新应用程序密钥的到期日期来强制其过期,然后再调用此服务来关闭会话。
如果启用了审计子系统,则会审计对此服务的调用。审计消息属于 DEVICE_COMMUNICATIONS 类别。有关审计子系统的信息,请参阅 审计子系统及其相关主题。