smile chat: Eine Mehrbenutzer-Netzwerkanwendung in C++ und Java
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizensiert.
Der Server des smile chats besteht aus rund 10.000 Zeilen C++-Code. Ohne die Unterstützung verschiedener Bibliotheken würde er jedoch aus wesentlich mehr Quellcode bestehen. Die Bibliotheken, auf denen der smile chat-Server basiert, sind zwingend notwending, um den Server kompilieren zu können.
In diesem Kapitel wird Ihnen erklärt, welche Bibliotheken Sie downloaden und installieren müssen, um anschließend den smile chat-Server kompilieren und starten zu können.
Sie benötigen einen Zugriff auf die Shell Ihres Unix- oder Linux-Servers. Ein FTP-Zugriff reicht nicht aus, da Sie Programme auf dem Server starten können müssen.
Loggen Sie sich per Telnet oder vorzugsweise per SSH in Ihren Server ein und folgen Sie der Anleitung in diesem Kapitel. Auch wenn Sie zahlreiche Bibliotheken downloaden und installieren müssen, so sollten auf aktuellen Unix- und Linux-Systemen keine Schwierigkeiten zu erwarten sein.
Sie müssen Zugriff auf einen halbwegs aktuellen C++-Compiler der GCC-Suite haben. Wenn Ihnen g++ ab der Version 3.0 zur Verfügung steht, sollte es keine Probleme bei der Kompilierung geben.
STLport ist eine plattform-unabhängige Implementierung der C++ Standard Library. Während C++-Compiler häufig mit ihrer eigenen Implementierung der C++ Standard Library kommen, war die C++ Standard Library der GCC-Suite jedoch über lange Zeit nicht vollständig. Der smile chat hat daher fast schon traditionell immer STLport verwendet.
Je nach GCC-Version können Sie diesen Schritt überspringen - eventuell unterstützt Ihre GCC-Version von Haus aus die C++ Standard Library vollständig. In diesem Fall müssen Sie STLport nicht herunterladen und installieren. Es kann aber auch nicht schaden, auf STLport zu setzen, da garantiert ist, dass der smile chat mit dieser C++ Standard Library-Implementierung problemlos funktioniert.
Wir gehen im Folgenden davon aus, dass Sie sich mit dem Benutzernamen boris in einen Server namens myserver einloggen und sich in einem Unterverzeichnis smilechat Ihres Home-Verzeichnisses befinden. Wir gehen nicht davon aus, dass Sie root-Rechte besitzen.
boris@myserver:~/smilechat> wget http://www.stlport.com/archive/STLport-4.6.2.tar.gz
Mit wget können Sie eine Datei von einem anderen Server direkt in Ihr Verzeichnis herunterladen. Wenn Sie obigen Befehl eingeben, wird eine rund 780 KB große Datei auf Ihren Server kopiert, die den Quellcode der STLport-Version 4.6.2 enthält.
Mit den folgenden Befehlen entpacken Sie den Quellcode in das Unterverzeichnis STLport-4.6.2 und wechseln in dieses.
boris@myserver:~/smilechat> gunzip STLport-4.6.2.tar.gz boris@myserver:~/smilechat> tar -xvf STLport-4.6.2.tar boris@myserver:~/smilechat> cd STLport-4.6.2
Sie finden im Unterverzeichnis STLport-4.6.2 eine Datei namens INSTALL, die die Installationsschritte für STLport erklärt. Sie können sich aber auch an die folgende Anleitung halten.
boris@myserver:~/smilechat/STLport-4.6.2> cd src boris@myserver:~/smilechat/STLport-4.6.2/src> make -f gcc.mak all
Der make-Befehl führt vollautomatisch alle Schritte aus, die für die Kompilierung von STLport notwendig sind. Sie müssen lediglich eine mak-Datei hinter der Option -f angeben, damit STLport mit dem richtigen Compiler und für das richtige Betriebssystem erstellt wird. Die mak-Datei gcc.mak wird für GCC verwendet. Sollten Sie mit einem anderen Compiler arbeiten, geben Sie hinter -f eine andere mak-Datei an. Sie finden eine ganze Reihe an mak-Dateien für verschiedene Compiler und Betriebssysteme im src-Verzeichnis.
Vergessen Sie die Angabe von all nicht. Damit wird make angewiesen, alle Schritte auszuführen, die in der entsprechenden mak-Datei enthalten sind.
Nach Eingabe dieses Befehls lehnen Sie sich zurück und warten, bis der Compiler seine Arbeit verrichtet hat. Das kann unter Umständen mehrere Minuten dauern, da sehr viele Schritte zur Kompilierung von STLport auszuführen sind.
Wenn die Kompilierung abgeschlossen ist, werfen Sie einen Blick ins lib-Verzeichnis.
boris@myserver:~/smilechat/STLport-4.6.2/src> cd ../lib boris@myserver:~/smilechat/STLport-4.6.2/lib> ls -la
Sie finden dort unter anderem die Datei libstlport_gcc.so.4.6. Das ist die Bibliothek, die später vom smile chat verwendet wird.
Nachdem Sie STLport erfolgreich kompiliert haben, richten Sie als nächstes die Boost C++ Libraries ein. Laden Sie den Quellcode der Boost C++ Libraries mit folgendem Befehl auf Ihren Server.
boris@myserver:~/smilechat> wget http://mesh.dl.sourceforge.net/sourceforge/boost/boost_1_33_1.tar.gz
Im nächsten Schritt entpacken Sie den Quellcode und wechseln in das Unterverzeichnis boost_1_33_1.
boris@myserver:~/smilechat> gunzip boost_1_33_1.tar.gz boris@myserver:~/smilechat> tar -xvf boost_1_33_1.tar boris@myserver:~/smilechat> cd boost_1_33_1
Als nächstes müssen Sie Bjam runterladen. Es handelt sich hierbei quasi um die Installationsdatei. Das, was bei STLport durch make erledigt wird, geschieht bei den Boost C++ Libraries durch Bjam.
Bjam ist ein kleines Programm, das alle Schritte, die zur Kompilierung und Installation notwendig sind, automatisch ausführt. Da die Boost C++ Libraries jedoch auf verschiedenen Betriebssystemen verwendet werden können, muss Bjam separat heruntergeladen werden. Geben Sie folgenden Befehl ein, um Bjam für Linux auf Ihren Server zu laden.
boris@myserver:~/smilechat/boost_1_33_1> wget http://belnet.dl.sourceforge.net/sourceforge/boost/boost-jam-3.1.13-1-linuxx86.tgz
Entpacken Sie Bjam als nächstes.
boris@myserver:~/smilechat/boost_1_33_1> gunzip boost-jam-3.1.13-1-linuxx86.tgz boris@myserver:~/smilechat/boost_1_33_1> tar -xvf boost-jam-3.1.13-1-linuxx86.tar
Die ausführbare Datei bjam wird in einem Unterverzeichnis namens boost-jam-3.1.13-1-linuxx86 entpackt. Kopieren Sie die Datei in das Verzeichnis, in dem Sie sich momentan befinden, und starten Sie bjam wie folgt.
boris@myserver:~/smilechat/boost_1_33_1> cp boost-jam-3.1.13-1-linuxx86/bjam . boris@myserver:~/smilechat/boost_1_33_1> ./bjam "-sTOOLS=gcc-stlport" "-sSTLPORT_PATH=.." --without-python stage
Abhängig von Ihrem Server kann es nun bis zu einer Stunde dauern, bis Bjam sämtliche C++ Boost Libraries kompiliert hat. Sie brauchen nicht vor Ihrem Computer sitzen bleiben, da Bjam vollautomatisch arbeitet und keine Eingaben erwartet.
Wenn die Kompilierung abgeschlossen ist, schauen Sie mit folgendem Befehl nach, ob das Unterverzeichnis stage/lib angelegt wurde und Bibliotheken enthält.
boris@myserver:~/smilechat/boost_1_33_1> ls -la stage/lib
Aus diesesm Verzeichnis wird GCC Code für die Kompilierung des smile chats verwenden.
Die Abkürzung OTL steht für Oracle, ODBC und DB2-CLI Template Library. Es handelt sich hierbei um eine Sammlung von C++-Klassen, die den Zugriff auf unterschiedliche Datenbanken und Datenbankschnittstellen ermöglichen. Der smile chat verwendet die ODBC-Schnittstelle und greift hierzu auf die entsprechenden C++-Klassen der OTL zu.
Die OTL ist sehr einfach zu installieren. Da es sich um Templates handelt, muss nichts kompiliert werden. Da alle Templates in einer einzigen Header-Datei definiert sind, müssen Sie lediglich eine Datei herunterladen. Gehen Sie dabei wie folgt vor.
boris@myserver:~/smilechat> wget http://otl.sourceforge.net/otlv4_h.zip boris@myserver:~/smilechat> unzip otlv4_h.zip boris@myserver:~/smilechat> mkdir otl boris@myserver:~/smilechat> mv otlv4.h otl/
Wie Sie sehen ist lediglich die Datei otlv4.h im ZIP-Archiv enthalten.
Der Datenbankstandard ODBC basiert auf einem Mittler, der jede Software, die ODBC unterstützt, und jede Datenbank, für die es einen ODBC-Treiber gibt, verbindet. Dieser Mittler wird ODBC-Manager genannt.
Da ODBC aus der Windows-Welt stammt, ist in den Betriebssystemen von Microsoft von Haus aus ein ODBC-Manager integriert. Für Unix und Linux müssen Sie einen ODBC-Manager selbst einrichten. Der smile chat verwendet iODBC. Sie können aber auch einen anderen ODBC-Manager einsetzen.
boris@myserver:~/smilechat> wget http://www.iodbc.org/downloads/iODBC/libiodbc-3.0.6.tar.gz boris@myserver:~/smilechat> gunzip libiodbc-3.0.6.tar.gz boris@myserver:~/smilechat> tar -xvf libiodbc-3.0.6.tar boris@myserver:~/smilechat> cd libiodbc-3.0.6 boris@myserver:~/smilechat/libiodbc-3.0.6> ./configure boris@myserver:~/smilechat/libiodbc-3.0.6> make
Werfen Sie anschließend einen Blick ins Unterverzeichnis iodbc/.libs - dort sollten Sie neben zahlreichen Objektdateien auch die Bibliothek libiodbc.so.2.1.15 sehen.
boris@myserver:~/smilechat/libiodbc-3.0-6> ls -la iodbc/.libs
Zur Kompilierung des smile chat-Servers wird später auf diese Bibliothek zugegriffen.
Der ODBC-Manager, den Sie soeben installiert haben, ist ein datenbankunabhängiger Mittler. Damit eine Datenbank mit dem ODBC-Manager zusammenarbeiten kann, muss es ein Verbindungsstück geben - den ODBC-Treiber. Jede Datenbank, die ODBC unterstützt, bietet einen ODBC-Treiber an, damit der ODBC-Manager über diesen Treiber mit der Datenbank kommunizieren kann. Sie können den smile chat mit jeder beliebigen Datenbank betreiben, die ODBC unterstützt.
Der smile chat wurde jahrelang mit MySQL betrieben. Da MySQL eine sehr populäre Datenbank ist, wird Ihnen im Folgenden gezeigt, wie Sie den ODBC-Treiber für MySQL installieren. Sie können aber auch einen anderen ODBC-Treiber einer anderen Datenbank verwenden.
boris@myserver:~/smilechat> wget http://downloads.mysql.com/archives/myodbc-2.50/MyODBC-2.50.39.tar.gz boris@myserver:~/smilechat> gunzip MyODBC-2.50.39.tar.gz boris@myserver:~/smilechat> tar -xvf MyODBC-2.50.39.tar boris@myserver:~/smilechat> cd MyODBC-2.50.39 boris@myserver:~/smilechat/MyODBC-2.50.39> ./configure --with-iodbc=../libiodbc-3.0.6 --with-iodbc-libs=/home/boris/smilechat/libiodbc-3.0.6/iodbc/.libs boris@myserver:~/smilechat/MyODBC-2.50.39> make
Beachten Sie, dass Sie hinter --with-iodbc-libs unbedingt eine absolute Pfadangabe vornehmen müssen. Wenn Ihr Home-Verzeichnis nicht /home/boris ist, müssen Sie den Pfad ändern.
Es kann sein, dass configure sich beschwert, dass es MySQL nicht finden kann. Sie müssen dann configure mit --with-mysql-libs und --with-mysql-includes aufrufen. Sehen Sie sich folgendes Beispiel an, in dem diese beiden zusätzlichen Parameter verwendet werden.
boris@myserver:~/smilechat/MyODBC-2.50.39> ./configure --with-mysql-libs=/usr/local/mysql/lib --with-mysql-includes=/usr/local/mysql/include --with-iodbc=../libiodbc-3.0.6 --with-iodbc-libs=/home/boris/smilechat/libiodbc-3.0.6/iodbc/.libs
Um zu überprüfen, ob der ODBC-Treiber erfolgreich erstellt wurde, werfen Sie einen Blick ins Unterverzeichnis .libs.
boris@myserver:~/smilechat/MyODBC-2.50.39> ls -la .libs
Dort sollten Sie eine Datei libmyodbc-2.50.39.so sehen.
Nachdem Sie den ODBC-Manager und -Treiber kompiliert haben, müssen Sie als nächstes Ihre Datenbank einrichten. Zuerst müssen Sie die vom smile chat-Server benötigten Tabellen in Ihrer Datenbank erstellen. In der ZIP-Datei, die den Quellcode zum smile chat enthält, finden Sie im Verzeichnis database eine Datei setup.txt. Sie enthält SQL-Code, den Sie möglicherweise direkt an Ihre Datenbank weiterreichen können. Wenn Sie zum Beispiel eine grafische Benutzeroberfläche verwenden, um Ihre Datenbank zu verwalten, öffnen Sie setup.txt in einem Texteditor Ihrer Wahl und erstellen Sie die Tabellen entsprechend in Ihrer Administrationssoftware.
Im nächsten Schritt müssen Sie eine Konfigurationsdatei erstellen. Da ein ODBC-Manager verschiedene Datenbanken über verschiedene ODBC-Treiber ansprechen kann, muss es irgendeine Möglichkeit geben, eine jeweilige Verbindung auszusuchen. Das geschieht über Data Source Names, kurz DSN. Diese werden einfach in einer Konfigurationsdatei angelegt und enthalten alle notwendigen Angaben, um auf eine ganze bestimmte Datenbank über einen ganz bestimmten ODBC-Treiber zuzugreifen.
Wenn Sie den ODBC-Manager iODBC verwenden, legen Sie eine Konfigurationsdatei .odbc.ini mit folgendem Inhalt im Homeverzeichnis /home/boris an.
[ODBC Data Sources] MyODBC = MyODBC 2.50.39 [MyODBC] Driver = /home/boris/libiodbc-3.0.6/iodbc/.libs/libmyodbc.so Host = localhost User = boris Password = 123456 Database = database Socket = /tmp/mysql.sock
In obiger Konfigurationsdatei wird ein DSN namens MyODBC konfiguriert. MyODBC wird hinter dem ersten Gleichheitszeichen näher beschrieben. Diese Beschreibung dient aber nur der Dokumentation und ist eher zweitranging. Die eigentliche Definition dieses DSN findet im zweiten Teil der Konfigurationsdatei statt.
Hinter Driver wird der Pfad auf den entsprechenden ODBC-Treiber angegeben. Sie müssen gegebenenfalls den Pfad anpassen.
Hinter Host wird der Servername angegeben. Wenn sich die Datenbank auf dem gleichen Server wie der smile chat befindet, können Sie hier einfach localhost angeben.
Hinter User und Password geben Sie den Benutzernamen und das Passwort an, mit sich der smile chat in die Datenbank einloggen soll.
Hinter Database geben Sie den Namen der Datenbank an, in der Sie die Tabellen für den smile chat angelegt haben.
In der Konfigurationsdatei scd.cfg wird hinter db.connection ein Verbindungsstring angegeben. Dieser muss mindestens aus einem DSN bestehen. Es ist möglich, Angaben wie Username und Password im Verbindungsstring zu überschreiben. Wenn Sie obige Konfigurationsdatei verwenden, muss der Verbindungsstring für den smile chat-Server aber mindestens "dsn=MyODBC" lauten. Der smile chat-Server wird dann wie unter MyODBC definiert auf die entsprechende Datenbank zugreifen.
Die Netzwerkbibliothek des smile chats trägt den Namen smile net. Sie war ursprünglich integraler Bestandteil des smile chat-Servers, ist aber im Laufe der Zeit zu einer unabhängigen Netzwerkbibliothek herausgearbeitet worden. Die Netzwerkbibliothek smile net könnte daher auch völlig unabhängig vom smile chat-Server zur Entwicklung von Netzwerkanwendungen eingesetzt werden.
Da smile net eine unabhängige Komponente ist, muss sie auch in einem separaten Schritt kompiliert werden. Laden Sie nun, wenn Sie es bisher noch nicht getan haben, den Quellcode des smile chats auf Ihren Server und entpacken Sie ihn.
boris@myserver:~/smilechat> wget http://www.highscore.de/downloads/smilechat2.2.zip boris@myserver:~/smilechat> unzip smilechat2.2.zip
Wenn Sie das ZIP-Archiv entpacken, werden mehrere Unterverzeichnisse angelegt. Wechseln Sie in das Verzeichnis smilenet und kompilieren Sie die Netzwerkbibliothek.
boris@myserver:~/smilechat> cd smilenet boris@myserver:~/smilechat/smilenet> make
Es wird eine Bibliothek names libsmilenet.a erstellt, die vom smile chat-Server zur Netzwerkkommunikation verwendet wird.
Nachdem Sie zahlreiche Bibliotheken heruntergeladen, kompiliert und eingerichtet haben, erfolgt nun der letzte Schritt - die Kompilierung des smile chat-Servers.
Als Sie die Netzwerkbibliothek smile net erstellt haben, hatten Sie bereits den Quellcode des smile chats heruntergeladen. Wechseln Sie nun in das Verzeichnis ~/smilechat/server und kompilieren Sie den smile chat-Server.
boris@myserver:~/smilechat/server> make -f linux-stlport.mak
Sie finden im Verzeichnis server mehrere mak-Dateien. Es wird empfohlen, den smile chat-Server wie oben angegeben mit der Datei linux-stlport.mak zu erstellen. Die anderen mak-Dateien können Sie verwenden und testen, wenn Sie sich etwas mehr mit dem smile chat-Server beschäftigen wollen.
Wenn der smile chat-Server erfolgreich erstellt wurde, sehen Sie eine Datei scd2 im Verzeichnis server. Die Abkürzung scd2 steht für smile chat-Dämon Version 2. Unter Unix und Linux werden Programme, die im Hintergrund laufen, als Dämon bezeichnet. Diese Programme werden gestartet und laufen dann scheinbar ohne das Zutun des Anwenders unsichtbar im Hintergrund - es gibt keine direkten Eingabemöglichkeiten oder Windows-Oberflächen.
Wenn Sie versuchen, die Datei scd2 zu starten, erhalten Sie eine Fehlermeldung. Der Grund ist, dass der smile chat-Server eine Konfigurationsdatei benötigt.
Kopieren Sie die Datei scd2 in das Verzeichnis ~/smilechat/bin. Dort gibt es ein kurzes Skript names sc, das ein paar notwendige Einstellungen vornimmt und den smile chat-Server mit einer Konfigurationsdatei aus dem Verzeichnis ~/smilechat/etc startet.
boris@myserver:~/smilechat/server> cp scd2 ../bin/ boris@myserver:~/smilechat/server> cd ../bin boris@myserver:~/smilechat/bin> ./sc
Wenn alles funktioniert, erhalten Sie eine entsprechende Meldung, dass der smile chat erfolgreich gestartet wurde.
Im folgenden Kapitel wird Ihnen erklärt, wie Sie den smile chat konfigurieren können.
Wenn Sie sich momentan wundern, wie Sie den soeben gestarteten smile chat-Server wieder abschalten können - der smile chat-Server läuft ja nun schließlich im Hintergrund - müssen Sie erst die Prozess-ID in Erfahrung bringen. Geben Sie folgenden Befehl ein, um die Prozess-ID aller im Hintergrund laufender Anwendungen zu ermitteln.
boris@myserver:~/smilechat> ps -x
Den smile chat-Server erkennen Sie am scd2, dem Namen des Dämons. In der gleichen Zeile sehen Sie eine in den meisten Fällen vier- oder fünfstellige Zahl - die Prozess-ID. Geben Sie nun folgenden Befehl ein, um den smile chat-Server zu beenden. Im folgenden Beispiel gehen wir davon aus, dass die Prozess-ID 3319 ist.
boris@myserver:~/smilechat> kill 3319
Geben Sie anstatt der Prozess-ID 3319 die Nummer an, die Ihnen im Schritt zuvor von ps angezeigt wurde.
Copyright © 2005-2007 Boris Schäling