Maison  >  Article  >  développement back-end  >  Notes d'étude d'Apache Mina (4) - Session

Notes d'étude d'Apache Mina (4) - Session

黄舟
黄舟original
2017-01-18 09:59:431270parcourir

La session est le cœur d'Apache Chaque fois qu'une connexion client arrive, une nouvelle session est créée jusqu'à ce que la connexion soit fermée. La session est utilisée pour enregistrer les connexions et diverses informations.

La session a les états suivants :

Connected : the session has been created and is available
Idle : the session hasn't processed any request for at least a period of time (this period is configurable)

Idle for read : no read has actually been made for a period of time
Idle for write : no write has actually been made for a period of time
Idle for both : no read nor write for a period of time

Closing : the session is being closed (the remaining messages are being flushed, cleaning up is not terminated)
Closed : The session is now closed, nothing else can be done to revive it.

La figure suivante montre la relation de transition d'état de la session :

Notes détude dApache Mina (4) - Session

Les paramètres suivants Peut être utilisé pour configurer la session

taille du tampon de réception
taille du tampon d'envoi
Temps d'inactivité
Temps d'écriture

Gérer les attributs définis par l'utilisateur :

Pour Par exemple, si vous souhaitez suivre le nombre de requêtes envoyées par un utilisateur depuis l'établissement de la session, alors elles peuvent être facilement stockées dans cette carte : créez simplement une clé et associez-la à la valeur.

...  
int counterValue = session.getAttribute( "counter" );  
session.setAttribute( "counter", counterValue + 1 );  
...

Nous utilisons des paires clé/valeur pour stocker les attributs dans la session. Cette paire clé/valeur peut être lue, ajoutée ou supprimée via le conteneur de session.

Définir le conteneur

Comme nous l'avons dit, ce conteneur est un conteneur clé/valeur, qui est par défaut un mappage. Bien sûr, il peut également être défini comme d'autres structures de données. Lorsque la session est créée, nous pouvons implémenter une interface et une usine pour créer le conteneur. L'extrait de code suivant illustre comment créer un conteneur lors de l'initialisation de la session (je ne comprends pas, qu'est-ce que cela signifie ?)

protected final void initSession(IoSession session,  
        IoFuture future, IoSessionInitializer sessionInitializer) {  
    ...  
    try {  
        ((AbstractIoSession) session).setAttributeMap(session.getService()  
                .getSessionDataStructureFactory().getAttributeMap(session));  
    } catch (IoSessionInitializationException e) {  
        throw e;  
    } catch (Exception e) {  
        throw new IoSessionInitializationException(  
                "Failed to initialize an attributeMap.", e);  
    }

et voici l'interface d'usine que nous pouvons implémenter si nous voulons en définir un autre type de conteneur :

public interface IoSessionDataStructureFactory {  
    /** 
     * Returns an {@link IoSessionAttributeMap} which is going to be associated 
     * with the specified <tt>session</tt>.  Please note that the returned 
     * implementation must be thread-safe. 
     */  
     IoSessionAttributeMap getAttributeMap(IoSession session) throws Exception;  
 }

Chaîne de filtres

Chaque session sera associée à des chaînes de filtres pour traiter les requêtes entrantes ou les données sortantes. Chaque session aura une chaîne de filtres distincte spécifiée et, dans la plupart des cas, nous utiliserons plusieurs des mêmes chaînes de filtres d'une session à l'autre.

Statistiques

Each session also keep a track of records about what has been done for the session :

number of bytes received/sent
number of messages received/sent
Idle status
throughput

and many other useful informations.

Handler

Enfin, un gestionnaire doit être attaché à une session pour gérer les messages du programme. Ce gestionnaire enverra également un package en réponse, appelez simplement la méthode d'écriture :

...  
session.write( <your message> );  
...

Ce qui précède est le contenu des notes d'étude d'Apache Mina (4) -Session. Pour plus de contenu connexe, veuillez faire attention. sur le site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn