Hallo
Ich arbeite gerade an einem Messenger, der auch fortschritte macht aber es gibt da noch eine recht umfangreiche offene Frage.
Mein Messenger wird zwar nie die Größenordnung von MSN, ICQ oder sogar QQ erreichen aber mich würde es schon interessieren
wie es dort wohl laufen mag.
Daten von A nach B zu senden ist ja noch "einfach" Dateiversand und Video/Audio stelle ich mir da auch noch einfacher vor im
Gegensatz dazu wie man die Session Daten der Benutzer handhabt.
Es sollte ja alles Server gestützt sein. Am Client selber wird nichts Im speicher gehalten sondern er Visualisiert ja eigentlich
nur Packete vom Server.
Aber wie schaut es denn mit solchen Funktionen aus wie Spam, Ignore, Block und der Erlaubnis jemandem etwas zu senden.
- Spam: Ein Client sendet zu viele Packete an den selben Client in einer Zeitspanne X. Der Server sollte ihm mitteilen das er
spamt und bei weiteren vergehen den Server verlassen muss.
- Ignore & Block: Ein Client sendet eine Nachricht an einen anderen Client. Dieser fühlt sich jedoch beläßtigt und nutzt eine
der beiden Funktionen. Wenn dieser Client allerdings weiterhin Nachrichten an den betreffenden Client sendet so sollten die
Nachrichten nicht mehr vom Server weiter transportiert werden.
- Erlaubnis: Ebenso wie bei den anderen funtionen muss geprüft werden ob ein Client einem Anderen eine Nachricht senden darf.
ist natürlich die gleiche Verfahren wie bei Ignore & Block nur eben anders herum.
Wie würde man so etwas umsetzen? Bei einem kleinen Kreis von Benutzern wäre es denke ich möglich entweder alles für eine Session
in den Speicher zu laden oder eben die Datenbank abzufragen. Wobei mir da ersteres besser gefällt, denn da müsste nicht bei jeder
Nachricht die Datenbank abgefragt werden.
Bei einer Größenordnug der oben genannten Messengern denke ich ist beides keine Umsetzung wert. Da hoher Speicherverbraucht
auftreten würde oder aber die Datenbank das sicherlich nicht bewältigen würde.
Mir kam da nun eine Mischung aus beiden Varianten in den Sinn. Die Daten werden mit einer Lebensdauer versehen und dann in den
Speicher geladen bei erstmaligem Bedarf. Ein Client möchte eine Nachricht versenden. Der Server schaut nach ob es ein
Beziehungsobjekt am Empfänger gibt und entsprechend ausgelesen. Daraufhin die Nachricht weitergeleitet oder eben nicht.
Nach der Lebensdauer wird das Beziehungsobjekt aus dem speicher entfernt. Sollte jetzt erneut dieser Client eine Nachricht an
den Empfänger senden, existiert kein Beziehungsobjekt und es wird in der Datenbank nachgefragt, anschließend das beziehungsobjekt
wieder erstellt.
Wie würdet ihr so etwas umsetzen wenn es um mehrere tausend Benutzer geht wie es bei QQ, MSN und ICQ der Fall ist.
Mit freundlichem Gruß
Cyber