Définition du modèle ThingWorx dans Composer > Système > Sous-systèmes > Sous-système de gestion des communications WebSocket
Sous-système de gestion des communications WebSocket
Le sous-système de gestion des communications WebSocket gère les communications WebSocket de base.
Configuration
Paramètres de protection des liaisons
Paramètre
Type de base
Par défaut
Remarques
Politique de protection des liaisons
STRING
First-in-wins
Choisissez la Politique de protection des liaisons souhaitée dans le menu. Par défaut, la politique active est First-in wins. Avec cette politique, dès lors que la plateforme reçoit une nouvelle tentative de liaison de la part d'un périphérique Edge déjà lié, elle rejette cette nouvelle tentative de liaison.
Avec la politique Last-in wins, au lieu de rejeter la nouvelle tentative de liaison du périphérique déjà lié, la plateforme acceptera la nouvelle liaison et mettra à jour les règles de routage relatives à l'envoi des messages au périphérique Edge.
Paramètres de communication WebSocket
Paramètre
Type de base
Par défaut
Remarques
Délai d'inactivité de la connexion (sec)
INTEGER
60
Une fois la connexion établie, le sous-système de gestion des communications WebSocket attend le nombre de secondes spécifié avant de fermer la connexion. En cas d'activité, le timer de connexion inactive est réinitialisé.
Taux de ping de connexion inactive (sec)
INTEGER
45
ThingWorx attend le nombre de secondes spécifié pour un ping d'un client. Si un ping est reçu, le cycle de communication continue.
Si aucun pong n'est reçu pour une requête ping dans le nombre de secondes spécifié, le SDK se déconnectera et tentera de se reconnecter. La déconnexion entraînera la fermeture du socket, de la connexion ThingWorx, de la connexion WebSocket, de la connexion TLS et du socket au niveau du système d'exploitation. Lors de la reconnexion, de nouvelles versions de ces couches de connexion seront créées, en supposant que chaque couche d'authentification ait réussi.
Temps d'attente avant le message d'authentification (sec)
INTEGER
15
Une fois la connexion établie, le serveur distant attend le laps de temps spécifié pour l'authentification.Si aucun message d'authentification n'est reçu, le socket se fermera.
Temps d'attente du message de réponse avant le délai d'expiration (sec)
INTEGER
30
Si le serveur est en ligne et que la requête échoue, une erreur est levée.Si le serveur est hors ligne, la requête est placée dans la file d'attente jusqu'à ce que le serveur soit de nouveau en ligne.
Envoyer un ping après l'envoi d'un message ou du trafic d'un tunnel
BOOLEAN
Vrai
Envoie un ping après l'envoi depuis un client d'un message vers la plateforme. Ce paramètre est appliqué lors de la création de la connexion.
Paramètre de configuration asynchrone
Paramètre
Type de base
Par défaut
Remarques
Nombre max. de fils
NUMBER
10
Utilisé pour les communications sortantes vers les périphériques Edge et spécifie le nombre de threads disponibles pour communiquer avec les objets distants. Un exemple d'une communication sortante serait l'exécution d'un service distant sur un objet distant. Toutes les requêtes au-delà de la valeur spécifiée sont envoyées dans une file d'attente.
Paramètres du point de terminaison client
Paramètre
Type de base
Par défaut
Remarques
Nom du point de terminaison
STRING
n/a
Nom défini par l'utilisateur.
URI du point de terminaison
STRING
n/a
URI du serveur distant pour la fédération.
Nbre max. de connexions de points de terminaison
INTEGER
1
Nombre de connexions ouvertes vers le serveur distant.
Taux de ping de connexion inactive (sec)
INTEGER
45
Utilisé lors de la fédération de deux serveurs. Le taux de ping de connexion inactive spécifie la fréquence d'envoi par le serveur d'un ping vers le serveur distant. Il garde la connexion active afin que les systèmes intermédiaires ne ferment pas le serveur pour cause d'inactivité. Il empêche également le serveur distant de fermer la connexion pour cause d'inactivité.
Clé d'application
PASSWORD
n/a
Lorsque vous cliquez sur le bouton Changer le mot de passe, l'écran Changer le mot de passe s'affiche. Vous pouvez alors entrer une nouvelle clé d'application.
Services
Les services du sous-système de gestion des communications WebSocket permettent à un administrateur d'interroger et de fermer les WebSockets AlwaysOn connectés à la plateforme ThingWorx.
* 
Seuls les administrateurs sont autorisés à utiliser les services du sous-système de gestion des communications WebSocket.
Si vous souhaitez connaître les éléments actuellement connectés à la plateforme en plus des objets distants, procédez comme suit :
1. Exécutez le service QueryEndpointSessions pour obtenir le nombre d'objets liés au point de terminaison spécifié, ainsi que le nombre de connexions actuellement ouvertes. Pour plus d'informations sur ce service, consultez la table ci-dessous.
2. Exécutez le service GetBoundThingsForEndpoint pour déterminer les liaisons objets/points de terminaison. Pour plus d'informations sur ce service, consultez la table ci-dessous.
3. Si une connexion donnée est compromise ou doit pour une autre raison être arrêtée, exécutez le service CloseEndpointSessions pour fermer la connexion.
* 
Vous pouvez également déclencher le service CloseEndpointSessions pour déconnecter les appareils avec des clés d'application expirées à intervalles réguliers. Vous trouverez ci-dessous un exemple de script qui identifie les appareils avec des clés d'application expirées et ferme leurs connexions :

// 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);
}
}
* 
Le service CloseEndpointSessions n'expire pas, ni n'invalide les clés d'application utilisées par les sessions WebSocket qu'il ferme. Si vous souhaitez déconnecter des appareils utilisant une clé d'application donnée et les empêcher de se reconnecter, commencez par forcer l'expiration de la clé d'application en mettant à jour sa date d'expiration. Appelez ensuite ce service pour fermer les sessions.
Pour plus d'informations sur le service CloseEndpointSessions, consultez la table ci-dessous.
Service
Description
QueryEndpointSessions
Ce service prend en entrée les paramètres suivants pour interroger les sessions :
authenticationType (STRING)
appKeyName (APPLICATIONKEYNAME)
userName (USERNAME)
startedBefore (DATETIME)
startedAfter (DATETIME)
lastUsedBefore (DATETIME)
lastUsedAfter (DATETIME)
hasBoundThings (BOOLEAN)
hasMultipleConnections (BOOLEAN)
maxItems (NUMBER). La valeur par défaut est fixée à 500 Résultats.
Ce service renvoie un élément INFOTABLE qui contient les champs suivants :
endpointId. Identificateur du point de terminaison, et non de la session.
authenticationType. Par exemple, "Clé d'application" ou "Informations d'identification utilisateur".
appKeyName. Nom de la clé d'application, le cas échéant.
userContext. Nom associé au compte sous lequel le service a été exécuté. Pour tous ces services, il s'agit de "Administrateur".
startDate
lastUsedDate. Exclut les commandes ping.
numberBoundThings. Nombre d'objets liés à ce point de terminaison.
numberConnections. Nombre actuel de connexions ouvertes. Pour un serveur de connexion ThingWorx ou un connecteur ThingWorx, il peut y avoir plusieurs connexions.
GetBoundThingsForEndpoint
Ce service prend en entrée un ID de point de terminaison. Lorsque vous appelez le service à partir de l'interface utilisateur de Composer, vous pouvez au besoin définir un nombre maximal de lignes à renvoyer. Il renvoie un objet INFOTABLE contenant les noms des objets liés au point de terminaison spécifié, jusqu'au nombre maximal de lignes spécifié.
Ce service permet aux administrateurs de déterminer quels objets sont liés à quels points de terminaison en évitant les problèmes de mémoire potentiels liés à leur inclusion dans les résultats de QueryEndpointSessions.
CloseEndpointSessions
Ce service prend en entrée un ID de point de terminaison ou tous les paramètres du service QueryEndpointSessions, à l'exception de maxItems. Si les deux sont spécifiés, le service renvoie une erreur.
Ce service ferme toutes les sessions qui correspondent aux critères. Lorsque vous spécifiez le point de terminaison, utilisez un ID de point de terminaison renvoyé par le service QueryEndpointSessions.
Ce service n'expire pas, ni n'invalide les clés d'application utilisées par les sessions qu'il ferme. Par conséquent, si vous souhaitez déconnecter des appareils utilisant une clé d'application donnée et les empêcher de se reconnecter, commencez par forcer l'expiration de la clé d'application en mettant à jour sa date d'expiration, puis appelez ce service pour fermer les sessions.
Les appels de ce service sont audités, si le sous-système d'audit est activé. Les messages d'audit appartiennent à la catégorie DEVICE_COMMUNICATIONS. Pour plus d'informations sur le sous-système d'audit, consultez la rubrique Sous-système d'audit et ses rubriques connexes.