Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp15/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2015 - D - Server

Server

TCP-Kommunikation

Das Starten des Servers kann durch Flags zur Spezifizierung von IP-Addresse, Portnummner usw. als Konfiguration des Servers erfolgen. Konfigurationsdateien (im json-Format) können die Einrichtung des Servers automatisieren.

config.json
{
    "address": "127.0.0.1",
    "port" : 4242,
    "dir" : "data"
}

Es wird ein Socket mit den übergebenen Daten geöffnet, der auf ankommende Verbindungen wartet. Versucht sich ein Client, mit dem Server zu verbinden, akzeptiert dieser die Verbindung zunächst und schickt sie durch spawnen in einem eigenen Thread an den Connection Handler, um auf weitere ankommende Verbindungen zu warten. Die Parallelisierung der Prozesse erlaubt es dem Server, die Client-Connections unabhängig voneinander zu verarbeiten.

for stream in listener.incoming() { // Accept connections and process them
    match stream {
        Ok(stream) => {
            // Connection succeeded: Spawn thread and handle
            thread::spawn(move|| { conn::handle(stream) });
        },
        Err(e) => {
            warn!("Failed to accept incoming connection: {:?}", e);
        },
    }
}

Der Connection Handler regelt die Kommunikation mit dem Client mit Hilfe des Net-Moduls und reguliert die Verarbeitung der ankommenden Daten, indem er diese entweder selbst aufbereitet (ping- und quit-Kommandos) oder an den Parser-Modul zur Weiterverarbeitung übergibt (query-Kommando mit dem zugehörigen Query-String). Vom Parser-Modul erhält der Server einen AST (abstract syntax tree), der weiter an den Query-Executer weitergeleitet wird, der wiederum einen ResultSet mit den gesammelten Daten zurückliefert (vgl. Parser / Zerteiler). Der ResultSet wird an die Library über die TCP-Verbindung gesendet und dort in einen für den Client mit nützlichen Funktionen ausgestatteten DataSet zur Weiterverwendung bereitgestellt (vgl. Library). Sogenannte Error-Packets werden an die Library gesendet, wenn im Verlaufe der Verarbeitung der Daten Probleme in den Server-Modulen entstehen (vgl. Protokolldefinition). Der Client bekommt also bei jeder seiner Interaktion mit dem Server eine Rückmeldung, ob seine Anfrage erfolgreich verarbeitet wurde oder ein Fehler aufgetreten war, deren Ursprung in den Error-Packet mit gesendet wird und vom Client abgefragt werden kann.

Authentifizierung

Das Authentifizierungsmodul ist momentan nicht implementiert und akzeptiert jede ankommende Verbindung, indem ein User mit Username und Password intern erstellt wird. Daten für die Authentifizierung werden werden im Klartext über den TCP-Stream gesendet und so auch intern im Server zur Überprüfung von Berechtigungen weitergereicht. Ein Konzept zur Speicherung der Nutzerdaten ist noch nicht ausgearbeitet. Für die Umsetzung des Authentication-Moduls ist über die Fragen der Datenverschlüsselung und -speicherung nachzudenken.


Autor: Elena Resch
Gruppe: Max Doll, Svantje Jung, Elena Resch


Page last modified on September 20, 2015, at 05:29 PM