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:
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 (m.sbmmt.com)!