Maison > Article > développement back-end > Notes d'étude d'Apache Mina (4) - Session
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 :
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) !