La connexion effectuée, le serveur envoie le message SC_REPLY sur la connexion TCP ouverte que le client a utilisée pour lui transmettre sa requête de connexion. Le client ferme ensuite la connexion. Le client doit conserver la connexion TCP ouverte jusqu'à ce que le serveur lui transmette le message SC_REPLY.
Ouvre une connexion TCP sur le serveur.
Attend que la connexion devienne «modifiable».
Envoie un message SC_CALLBACK_REG (contenant un message ADD_CLIENT).
Attend de recevoir un message SC_REPLY.
Reçoit un message SC_REPLY.
Reçoit un message stipulant que le serveur a fermé la connexion (lecture de 0 octet du socket).
Ferme la connexion.
Ouvre une connexion TCP sur le serveur.
Attend que la connexion devienne «inscriptible ».
Envoie un message SC_CALLBACK_REG (contenant un message REMOVE_CLIENT).
Attend de recevoir un message SC_REPLY.
Reçoit un message SC_REPLY.
Reçoit un message stipulant que le serveur a fermé la connexion (lecture de 0 octet du socket).
Ferme la connexion.
Chaque fois que le serveur reçoit un message SC_CALLBACK_REG d'un client, le serveur transmet un message SC_REPLY sur la même connexion ouverte indiquant si l'opération a réussi ou échoué. DTD XML SC_REPLY contient la DTD XML d'un message SC_REPLY, ainsi que les messages d'erreur éventuels que ce message peut contenir.
Un message SC_REPLY indique si une opération a réussi ou échoué. Il contient la version du message de protocole CRNP, un code d'état et un message d'état décrivant le code d'état de façon détaillée. Le tableau suivant présente les valeurs possibles du code d'état :
Code d'état |
Description |
---|---|
OK |
Le message a été traité avec succès. |
RETRY |
La connexion du client a été rejetée par le serveur à cause d'une erreur transitoire (le client doit tenter de se reconnecter en utilisant d'autres paramètres). |
LOW_RESOURCE |
Les ressources du cluster sont faibles et le client peut uniquement réessayer ultérieurement (l'administrateur système du cluster peut également augmenter les ressources sur le cluster). |
SYSTEM_ERROR |
Un incident grave s'est produit. Contactez l'administrateur système du cluster. |
FAIL |
Le refus d'une autorisation ou tout autre incident a provoqué l'échec de la connexion. |
MALFORMED |
La requête XML est malformée et n'a pas pu être analysée. |
INVALID |
La requête XML est invalide (elle n'est pas conforme aux spécifications XML). |
VERSION_TOO_HIGH |
La version du message possède une résolution trop haute pour permettre de traiter le message avec succès. |
VERSION_TOO_LOW |
La version du message possède une résolution trop basse pour permettre de traiter le message avec succès. |
Dans des conditions normales, un client envoyant un message SC_CALLBACK_REG reçoit une réponse précisant si la connexion a réussi ou échoué.
Pourtant, le serveur peut être confronté à une condition d'erreur l'empêchant de retransmettre le message SC_REPLY au client. Le cas échéant, la connexion a pu réussir avant que la condition d'erreur ne se produise, échouer ou tout simplement ne pas avoir encore été traitée.
Comme le serveur doit être exécuté sur le cluster en tant que serveur de basculement ou hautement disponible, cette condition d'erreur ne signifie pas que le service est interrompu. De fait, le serveur est rapidement en mesure d'envoyer des événements au client nouvellement connecté.
Pour pallier ces conditions, le client doit :
Imposer un délai d'attente au niveau de l'application pour une connexion d'enregistrement en attente de la réception d'un message SC_REPLY, délai après lequel il doit retenter de se connecter.
Commencer à écouter son adresse IP de rappel et son numéro de port en vue de recevoir des notifications d'événement avant d'être connecté pour la notification de rappel d'événement. Le client doit attendre de recevoir un message de confirmation de connexion et de notification d'événement en parallèle. S'il commence à recevoir des notifications d'événement avant de recevoir un message de confirmation, il doit fermer la connexion d'enregistrement.