Zitat von
cruiser:
Erklär mal, was genau du machen willst. Evtl. findet sich dann ein Weg, der an einer Listenhaltung vorbei führt.
Das Beispiel war natürlich nur so gewählt, dass es überschaubar bleibt. Eigentlich bin ich gerade dabei, eine kleine Simulation für ein Peer-to-Peer - Netzwerk zu schreiben... Peers werden in einer Klasse TPeer repräsentiert. Jeder Peer wiederum kennt in seiner Routingliste eine Menge anderer Peers. Zwar könnte ich in der Liste auch nur die
IP-Adressen (welche durch eine eindeutige Integerzahl repräsentiert werden) speichern, aber dann müsste ein Peer erstmal eine Suche nach dem Objekt zu einer bestimmten Adresse durchführen, bevor er dieses ansprechen könnte.
Da die Simulation recht viele Peers beinhalten soll (10Tausend bis 10Mio... je mehr, desto besser
), ist eine Suche über die
IP nicht praktikabel (zu langsam, selbst wenn man das in O(log(n)) macht).
Deshalb bekommt nun jeder Peer eine OutgoingLink-Liste spendiert, in der er über Objektreferenzen direkt seine Nachbarn ansprechen kann. Da auch der Wegfall von Peers simuliert werden soll (entweder klinken sie sich ordentlich vom Netz aus, oder ihr Computer stürzt ab so dass sie sich nicht mehr abmelden können), muss ein TPeer-Objekt wissen, wann seine Links auf andere TPeer ungültig geworden sind.
Ich werde das nun durch eine IncomingLink-Liste machen, so dass jeder Peer auch umgekehrt wissen kann, wer einen Link auf ihn hält. So kann er sich bei ihnen abmelden und es hat den Vorteil, dass ich so auch erfahren kann, wie viele andere Computer einen bestimmten Peer jeweils als Routingpartner ausgewählt haben. Zuviele sollten das nämlich auch nicht werden, die Last sollte sich gleichmäßig auf alle verteilen... anhand der Zahl der Listeneinträge kann ich das dann sogar direkt messen.
Vielen Dank erstmal für die Ratschläge, das hat mir geholfen... wirklich ein nettes Forum hier
Gruß,
Helge