Aufbau eines Messengers wie ICQ
-
Hallo,
ich möchte einen Messenger wie ICQ programmieren.
Dazu wird ein Webserver genutzt, auf dem eine MySQL-Datenbank läuft
und 2 Tabellen eingerichtet sind names "stammdaten" und "onlineuser".Ich gehe mal davon aus, daß ICQ auch so ähnlich verfährt:
- User meldet sich an, Nickname + UIN werden in DB gespeichert
- User loggt sich ein, Überprüfung der Daten
- User ist in der Onlineliste
- ...
Aber ich denk mal die Messages werden nicht erst in einer DB gespeichert
sondern direkt zwischen den Usern ausgetauscht oder? Das ist ja an sich
kein Problem wenn man in der Onlineliste die IP des Users hinterlegt
und der Client bei einem bestimmten Port lauscht.Aber wie kriegt z.B. der Client mit, wenn ein neuer Buddy online kommt?
Soweit ich den Datenverkehr gesehen habe, checkt der Client nicht regelmäßig
wie bei einem Meta-Refresh-Chat z.B. die neuen Einträge/User.Ebenso wenn ein User offline geht...
-
Messenger schrieb:
Aber ich denk mal die Messages werden nicht erst in einer DB gespeichert
sondern direkt zwischen den Usern ausgetauscht oder?Vergiss nicht, dass ICQ auch Offlinemessages unterstützt. Also muss es doch irgedwo gespeichert werden.
-
Client und Server-Programm unterscheiden sich hier recht stark vom Aufbau. Von der Funktion her wird meines Wissens nach der Status des Users auf dem Server hinterlegt (online, offline, away + message). Nachrichten werden von einem Client zum Server und von dort aus zum anderen Client weitergesendet.
Das ganze wird nicht in ner DB gespeichert sondern läuft in Echtzeit. Es kommt jetzt natürlich darazf an, ob du nur einen (weiteren) Client für bereits vorhandene Netzwerke oder ein eigenes Protokoll entwickeln willst. Mit MySQL lassen sich natürlich Userdaten speichern, aber nicht der ganze Datenverkehr abwickeln.
-
Ja aber soweit ich weiß, tauschen bei ICQ die Clients die Daten aus, wenn einer schon offline ist, dann wird es natürlich in der ICQ-DB gespeichert.
Es findet wiegesagt auch keine regelmäßige Aktualisierung des Status statt, selbst wenn der User als "online" in der DB steht und dann einen TimeOut hat,
muss er ja irgendwie gelöscht werden.
-
ALso es ist bei mir oft so, wenn jemand rausfliegt, und ich versuch dem zu schreiben, dauerts immer etwas, dann wird er als Offline gezeigt, und dann steht da das Zeug von wegen Nachricht gespeichert und so.
-
schau dir mal jabber an:
http://de.wikipedia.org/wiki/Jabber
-
ICQ- und Jabber-Clients richten beide keine Direktverbindung zwischen den Usern ein (jedenfalls nicht zum chatten). Das würde auch Probleme machen, wenn bei einem Router der Port nicht entsprechend weitergeleitet wird. Deshalb funktioniert chatten immer und Filetransfer kann manchmal nerven.
Jabber ist besonders dezentral, hier kann eine Chat-Nachricht bis über 4 Stationen gehen: Client 1 -> Server 1 -> Server 2 -> Client 2
Prinzipiell finde ich das ein besseres System, weil so jeder einen Jabber-Server einrichten kann und der auch mit allen anderen funktioniert. Ein zentrales Netz hat da doch etliche Nachteile.
-
Ja das messaging geht über einen server, da direktverbindungen oft nicht möglich sind. Theoretisch können alle Daten mitgeloggt werden (macht das ICQ nicht und erhebt anspruch auf die rechte an dem gelaber?)
Dezentral und Zentral haben Nachteile. Aber VÖLLIG dezentral kann man keinen Instant Messenger Realisieren.
-
BloodLord schrieb:
Theoretisch können alle Daten mitgeloggt werden (macht das ICQ nicht und erhebt anspruch auf die rechte an dem gelaber?)
You agree that by posting any material or information anywhere on the ICQ Services and Information you surrender your copyright and any other proprietary right in the posted material or information. You further agree that ICQ Inc. is entitled to use at its own discretion any of the posted material or information in any manner it deems fit, including, but not limited to, publishing the material or distributing it.
-
BloodLord schrieb:
Ja das messaging geht über einen server, da direktverbindungen oft nicht möglich sind. Theoretisch können alle Daten mitgeloggt werden (macht das ICQ nicht und erhebt anspruch auf die rechte an dem gelaber?)
Dezentral und Zentral haben Nachteile. Aber VÖLLIG dezentral kann man keinen Instant Messenger Realisieren.
Naja, mit Multicast im Prinzip schon
Aber dann würd ja jeder jede Nachricht kriegen, und das ist bei ein par Tausen Benutzern sicher nicht sooog gut...
-
Jabber kann doch völlig dezentral sein, muss ja nur jeder einen Server aufmachen und sich dort genau nur seinen Account anlegen. Die Server-Server Verbindung wird über die Adresse hergestellt. Damit wäre das Jabber-Netzwerk genau so weit dezentral wie das darunterliegende Netzwerk selbst, in diesem Fall das Internet.