Heim  >  Artikel  >  Backend-Entwicklung  >  Apache Mina-Studiennotizen (4) – Sitzung

Apache Mina-Studiennotizen (4) – Sitzung

黄舟
黄舟Original
2017-01-18 09:59:431268Durchsuche

Sitzung ist der Kern von Apache. Immer wenn eine Client-Verbindung eintrifft, wird eine neue Sitzung erstellt, bis die Verbindung geschlossen wird. Die Sitzung wird zum Speichern von Verbindungen und verschiedenen Informationen verwendet.

Sitzung hat die folgenden Zustände:

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.

Die folgende Abbildung zeigt die Zustandsübergangsbeziehung von Sitzung:

Apache Mina-Studiennotizen (4) – Sitzung

Die folgenden Parameter Kann verwendet werden, um Sitzung zu konfigurieren

Empfangspuffergröße
Sendepuffergröße
Leerlaufzeit
Schreibzeitüberschreitung

Benutzerdefinierte Attribute verwalten:

Für Wenn Sie beispielsweise nachverfolgen möchten, wie viele Anfragen ein Benutzer seit dem Einrichten der Sitzung gesendet hat, können Sie dies problemlos in dieser Karte speichern: Erstellen Sie einfach einen Schlüssel und verknüpfen Sie ihn mit dem Wert.

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

Wir verwenden Schlüssel/Wert-Paare, um Attribute in der Sitzung zu speichern. Dieses Schlüssel/Wert-Paar kann über den Sitzungscontainer gelesen, hinzugefügt oder gelöscht werden.

Container definieren

Wie gesagt, dieser Container ist ein Schlüssel/Wert-Container, der standardmäßig eine Zuordnung verwendet. Natürlich kann er auch als andere Datenstrukturen definiert werden. Wenn die Sitzung erstellt wird, können wir eine Schnittstelle und eine Factory implementieren, um den Container zu erstellen. Der folgende Codeausschnitt veranschaulicht, wie man während der Sitzungsinitialisierung einen Container erstellt (ich verstehe nicht, was das bedeutet?)

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);  
    }

und hier ist die Factory-Schnittstelle, die wir implementieren können, wenn wir eine andere definieren möchten Art des Containers:

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;  
 }

Filterkette

Jede Sitzung wird mit einigen Filterketten verknüpft, um eingehende Anfragen oder ausgehende Daten zu verarbeiten. Für jede Sitzung wird eine separate Filterkette angegeben, und in den meisten Fällen werden wir sitzungsübergreifend viele der gleichen Filterketten verwenden.

Statistik

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

Zu guter Letzt muss ein Handler an eine Sitzung angehängt werden, um Programmnachrichten zu verarbeiten. Dieser Handler sendet auch ein Paket als Antwort. Rufen Sie einfach die Schreibmethode auf:

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

Das Obige ist der Inhalt der Apache Mina-Studiennotizen (4) – Sitzung. Weitere verwandte Inhalte finden Sie hier zur chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn