Definizione del modello ThingWorx in Composer > Sistema > Sottosistemi > Sottosistema Comunicazioni WebSocket
Sottosistema Comunicazioni WebSocket
Il sottosistema Comunicazioni WebSocket (WS) gestisce le comunicazioni WS di base.
Configurazione
Impostazioni protezione associazione
Impostazione
Tipo di base
Default
Note
Regola di protezione associazione
STRING
First-in-wins
Scegliere la Regola di protezione associazione desiderata dal menu. Per default, la regola è First-in wins. In base a questa regola, se la piattaforma riceve un nuovo tentativo di associazione da un dispositivo edge già associato, la piattaforma rifiuta il nuovo tentativo di associazione.
La regola Last-in wins indica che, anziché rifiutare una nuova associazione per il dispositivo già associato, la piattaforma deve accettare la nuova associazione e aggiornare le regole di routing sulla modalità di invio dei messaggi al dispositivo edge.
Impostazioni comunicazione WebSocket
Impostazione
Tipo di base
Default
Note
Timeout connessioni inattive (sec)
INTEGER
60
Una volta stabilita la connessione, il sottosistema Comunicazioni WebSocket attende il numero di secondi specificato prima di chiudere la connessione. Se è presente un'attività, il timer di inattività viene reimpostato.
Velocità di ping connessioni inattive (sec)
INTEGER
45
ThingWorx attende un ping da un client per il numero di secondi specificato. Se riceve un ping, il ciclo di comunicazione continua.
Se non riceve un pong a una richiesta di ping entro il numero di secondi specificato, l'SDK si disconnette e tenta di riconnettersi. La disconnessione chiude il socket, la connessione ThingWorx, la connessione WebSocket, la connessione TLS e il socket a livello di sistema operativo. L'operazione di riconnessione crea nuove versioni di questi livelli di connessione, presupponendo l'esito positivo di ogni livello di autenticazione.
Tempo di attesa per il messaggio di autenticazione (sec)
INTEGER
15
Una volta stabilita la connessione, il server remoto attende la quantità di tempo specificata per l'autenticazione.Se non riceve l'autenticazione, il socket viene chiuso.
Tempo di attesa di una richiesta per il messaggio di risposta prima del timeout (sec)
INTEGER
30
Se il server è in linea e la richiesta ha esito negativo, viene generato un errore.Se il server non è in linea, la richiesta viene messa in coda finché il server non sarà di nuovo in linea.
Invia un comando ping dopo aver inviato un messaggio o traffico tunnel
BOOLEAN
True
Invia un comando ping dopo l'invio di un messaggio da un client alla piattaforma. Questa impostazione è applicata quando si crea la connessione.
Impostazione di configurazione asincrona
Impostazione
Tipo di base
Default
Note
Numero massimo thread
NUMBER
10
Utilizzata per le comunicazioni in uscita per i dispositivi edge, specifica il numero di thread disponibili per comunicare con gli oggetti remoti. Un esempio di comunicazione in uscita consiste nell'esecuzione di un servizio remoto su un oggetto remoto. Tutte le richieste che superano il valore specificato vengono inviate a una coda.
Impostazioni dell'endpoint client
Impostazione
Tipo di base
Default
Note
Nome endpoint
STRING
n/d
Nome definito dall'utente.
URI endpoint
STRING
n/d
URI del server remoto da configurare nell'ambiente federato.
Numero max di connessioni endpoint
INTEGER
1
Numero di connessioni aperte per il server remoto.
Velocità di ping connessioni inattive (sec)
INTEGER
45
Utilizzata quando si configura un ambiente federato con due server. La velocità di ping connessioni inattive specifica la frequenza con la quale il server invia un ping al server remoto. Mantiene la connessione attiva in modo che i sistemi intermedi non arrestino il server a causa di inattività e impedisce al server remoto di chiudere la connessione per inattività.
Chiave di accesso
PASSWORD
n/d
Quando si fa clic sul pulsante Cambia password, viene visualizzata la schermata Cambia password. Qui è possibile immettere una nuova chiave di accesso.
Servizi
I servizi de sottosistema Comunicazioni WebSocket consentono a un amministratore di interrogare e chiudere i WebSocket AlwaysOn connessi a ThingWorx Platform.
* 
L'utilizzo dei servizi di WSCommunicationsSubsystem è consentito solo agli amministratori.
Se si desidera sapere che cosa è attualmente connesso alla piattaforma oltre agli oggetti remoti, attenersi alla procedura descritta di seguito.
1. Eseguire il servizio QueryEndpointSessions per ottenere il numero degli oggetti associati all'endpoint specificato, insieme al numero delle connessioni attualmente aperte. Per informazioni dettagliate su questo servizio, vedere la tabella riportata di seguito.
2. Eseguire il servizio GetBoundThingsForEndpoint per determinare quali oggetti sono associati ai singoli endpoint. Per informazioni dettagliate su questo servizio, vedere la tabella riportata di seguito.
3. Se una determinata connessione è compromessa o deve essere chiusa, eseguire il servizio CloseEndpointSessions per chiudere la connessione.
* 
È inoltre possibile attivare il servizio CloseEndpointSessions per scollegare i dispositivi con chiavi di accesso scadute a intervalli regolari. Di seguito è riportato uno script di esempio che identifica i dispositivi con chiavi di accesso scadute e chiude le relative connessioni:

// 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);
}
}
* 
Con il servizio CloseEndpointSessions, le chiavi di accesso utilizzate dalle sessioni chiuse non scadono né diventano non valide in altro modo. Se si desidera disconnettere i dispositivi con una determinata chiave di accesso e impedirne la riconnessione, forzare innanzitutto la scadenza della chiave di accesso aggiornando la data di scadenza. Richiamare quindi questo servizio per chiudere le sessioni.
Per ulteriori informazioni sul servizio CloseEndpointSessions, vedere la tabella riportata di seguito.
Servizio
Descrizione
QueryEndpointSessions
Per eseguire interrogazioni per le sessioni endpoint, questo servizio accetta i parametri seguenti:
authenticationType (STRING)
appKeyName (APPLICATIONKEYNAME)
userName (USERNAME)
startedBefore (DATETIME)
startedAfter (DATETIME)
lastUsedBefore (DATETIME)
lastUsedAfter (DATETIME)
hasBoundThings (BOOLEAN)
hasMultipleConnections (BOOLEAN)
maxItems (NUMBER). Il valore di default è 500 risultati.
Questo servizio restituisce una INFOTABLE contenente i campi seguenti:
endpointId. Identificatore dell'endpoint, non della sessione stessa.
authenticationType. ad esempio chiave di accesso o credenziali utente.
appKeyName Nome della chiave di accesso, se applicabile.
userContext. Nome associato all'account con cui è stato eseguito il servizio. Per tutti questi servizi è "Administrator".
startDate
lastUsedDate. I ping sono esclusi.
numberBoundThings. Numero di oggetti associati tramite questo endpoint.
numberConnections. Numero corrente di connessioni aperte. Per ThingWorx Connection Server o un connettore ThingWorx possono essere presenti più connessioni.
GetBoundThingsForEndpoint
Questo servizio accetta un ID di endpoint. Quando si richiama il servizio dall'interfaccia utente del Composer, è possibile impostare facoltativamente un numero massimo di righe da restituire. Restituisce una INFOTABLE contenente i nomi degli oggetti associati all'endpoint specificato, fino al numero massimo di righe specificato.
Questo servizio consente agli amministratori di determinare quali oggetti sono associati a quali endpoint senza generare potenziali problemi di memoria, includendo tali oggetti nei risultati di QueryEndpointSessions.
CloseEndpointSessions
Questo servizio accetta un ID endpoint oppure tutti i parametri del servizio QueryEndpointSessions tranne maxItems. Se vengono specificati entrambi, restituisce un errore.
Questo servizio chiude tutte le sessioni corrispondenti ai criteri. Quando si specifica l'endpoint, utilizzare un ID endpoint restituito dal servizio QueryEndpointSessions.
Con il servizio, le chiavi di accesso utilizzate dalle sessioni chiuse non scadono né diventano non valide in altro modo. Per questo motivo, se si desidera scollegare i dispositivi utilizzando una determinata chiave di accesso e impedirne la riconnessione, è innanzitutto necessario forzare la scadenza della chiave di accesso aggiornando la data di scadenza e quindi richiamare il servizio per chiudere le sessioni.
Se il sottosistema Verifica è attivato, le chiamate di questo servizio vengono sottoposte a verifica. I messaggi di verifica rientrano nella categoria DEVICE_COMMUNICATIONS. Per informazioni sul sottosistema Verifica, vedere Sottosistema Verifica e gli argomenti correlati.