Подсистема связи WebSocket
Подсистема связи по протоколу WebSocket (WS) обрабатывает основные взаимодействия с веб-сокетами.
Конфигурация
Настройки защиты привязок
Настройка
Базовый тип
По умолчанию
Примечания
Политика защиты привязок
STRING
First-in-wins
Выберите необходимую Политику защиты привязок в меню. Политика по умолчанию: First-in wins. Эта политика означает, что при получении платформой информации о новой попытке привязки от устройства Edge, которое уже привязано, платформа отклоняет новую попытку привязки.
Политика Last-in wins означает, что, вместо того чтобы отклонить новую попытку привязки уже привязанного устройства, платформа должна принять эту новую привязку и обновить правила маршрутизации, касающиеся отправки сообщений на данное устройство.
Настройки связи WebSocket
Настройка
Базовый тип
По умолчанию
Примечания
Время ожидания соединения в состоянии простоя (с)
INTEGER
60
После установки соединения подсистема связи WebSocket ожидает в течение указанного количества секунд, прежде чем соединение будет разорвано. При наличии задачи таймер простоя сбрасывается.
Частота ping-запросов соединения в состоянии простоя (с)
INTEGER
45
ThingWorx ожидает ping-запрос от клиента в течение указанного количества секунд. Если ping-запрос получен, цикл связи продолжается.
Если не будет получен ответ на ping-запрос в течение указанного количества секунд, SDK разорвет соединение и попытается установить его снова. При разъединении будет закрыт сокет, разорвано соединение с ThingWorx, соединение с WebSocket, соединение с TLS и закрыт сокет на уровне ОС. При повторном подключении будут созданы новые версии этих слоев соединений, если аутентификация в каждом слое пройдет успешно.
Время ожидания сообщения об аутентификации (с)
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.
* 
Только администраторам разрешено использовать сервисы 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. Наименование, связанное с учетной записью, под которой был запущен сервис. Для всех этих сервисов - это "Администратор".
startDate
lastUsedDate. Исключает ping-запросы.
numberBoundThings. Количество вещей, привязанных через эту конечную точку.
numberConnections. Текущее число открытых соединений. Для сервера соединений ThingWorx или соединителя ThingWorx может существовать несколько соединений.
GetBoundThingsForEndpoint
Этот сервис получает идентификатор конечной точки. При вызове сервиса из интерфейса пользователя Composer можно дополнительно задать максимальное число возвращаемых строк. Он возвращает INFOTABLE, содержащую наименования вещей, привязанных к указанной конечной точке, вплоть до указанного максимального числа строк.
Этот сервис позволяет администраторам определять, какие вещи связаны с какими конечными точками, не рискуя при этом возникновением проблем с памятью в результате их включения в результаты сервиса QueryEndpointSessions.
CloseEndpointSessions
Этот сервис принимает либо идентификатор конечной точки, либо все параметры из сервиса QueryEndpointSessions за исключением maxItems. Если указано и то и другое, сервис возвращает ошибку.
Этот сервис закрывает все сессии, соответствующие критериям. При задании конечной точки используйте идентификатор конечной точки, который был возвращен сервисом QueryEndpointSessions.
Этот сервис не осуществляет завершение срока действия (или аннулирование иным способом) любых ключей приложений, используемых сессиями, которые он закрывает. По этой причине, если планируется отсоединить устройства, использующие данный ключ приложения, и предотвратить их повторное подключение, необходимо вначале принудительно завершить срок действия ключа приложения, изменив дату окончания срока действия, а затем вызвать этот сервис, чтобы закрыть сессии.
Выполняется аудит вызовов этого сервиса, если включена подсистема аудита. Сообщения аудита попадают в категорию DEVICE_COMMUNICATIONS. Дополнительные сведения о подсистеме аудита см. в разделе Подсистема аудита и связанных разделах.
* 
Этот сервис будет пытаться закрыть конечные точки только для устройств, непосредственно присоединенных к ThingWorx Platform. Для закрытия конечных точек, соединенных с сервером соединений AlwaysOn и непосредственно подключенными устройствами, используйте вместо этого сервис CloseEndpoints.
CloseEndpoints
Этот сервис использует следующие параметры для запроса сессий конечных точек:
appKeyName (APPLICATIONKEYNAME)
endpointId (STRING)
Если указано и то и другое, сервис возвращает ошибку.
Этот сервис возвращает значение NUMBER, показывающее число соединений с конечными точками, которые вы пытаетесь закрыть.
Этот сервис закрывает все соединения с конечными точками, связанными с предоставленными параметрами appKeyName или endpoint ID. При указании конечной точки используйте значение endpoint ID, возвращенное сервисом QueryEndpointSessions.
* 
Этот сервис не прекращает срок действия и не аннулирует любые ключи приложения, используемые в сессиях, которые он закрывает. По этой причине, если планируется отсоединить устройства, использующие данный ключ приложения, и предотвратить их повторное подключение, необходимо вначале принудительно завершить срок действия ключа приложения, изменив дату окончания срока действия, а затем вызвать этот сервис, чтобы закрыть сессии.
При вызове этого сервиса, в результате которого закрываются соединения с конечными точками, выполняется аудит, если включена подсистема аудита. Сообщения аудита разбиты на категории в разделе DEVICE_COMMUNICATIONS. Дополнительные сведения о подсистеме аудита см. в разделе Подсистема аудита и связанных с ним разделах.
* 
Этот сервис является предпочтительным по сравнению с существующим сервисом CloseEndpointSessions для двух основных случаев применения:
Закрыть по имени ключа приложения
Закрыть по идентификатору конечной точки
Закрытие конечных точек является оптимальной попыткой для конечных точек на сервере соединений AlwaysOn. Возвращенное число закрытых конечных точек - это число конечных точек, для которых выполнялись попытки закрытия.
* 
Новый сервис QueryEndpoints разрешено использовать только администраторам.
Было ли это полезно?