[Auf Vorschlag von SO-Benutzern hierher verschoben (10k SO +) ]
Ich möchte eine Peer-to-Peer-Anwendung entwickeln. Obwohl ich viel Erfahrung mit LOB-Apps habe, bin ich neu in der P2P-Arena.
Ich habe eine ungefähre Vorstellung davon, wie die Dinge funktionieren sollten, brauche aber einige weitere Details, um mein Verständnis zu vervollständigen.
Was ich weiß (glaube), muss ich tun:
- Ein erheblicher Teil der Clients muss eingehende Verbindungen aktivieren (ua uPnP / NAT-Regeln).
- Knoten sollten andere bekannte Knoten gemeinsam nutzen, um die Ausfallsicherheit zu gewährleisten, wenn ein bestimmter Knoten ausfällt
- Zum Senden von Daten zwischen beliebigen Clients ist eine Form der Synchronisation / Routenfindung erforderlich
- Möglicherweise einige Ressourcen, die zwischen "dummen" Clients und leistungsstärkeren "Superknoten" unterscheiden, um die Synchronisierung / Freigabe von Knotenlisten zu handhaben und möglicherweise Nachrichten weiterzuleiten
- Clients ohne eingehende Unterstützung sollten eine ausgehende Verbindung offen halten, über die sie Informationen zu Knoten erhalten können, zu denen eine Verbindung hergestellt werden soll
Kurz gesagt, ich hoffe, (zunächst) einen Chat- / Messenger-Dienst anbieten zu können, der nicht auf einer Verbindung zu einem bestimmten zentralen Server beruht. Obwohl ich mir vorstelle, dass ich eine Reihe zentraler "Superknoten" bereitstellen muss, um die Dinge in Gang zu setzen (oder nach erheblichen Upgrades), sollten diese optional sein, sobald ein funktionierendes P2P-Netzwerk eingerichtet wurde.
Ich kann eine Reihe von Problemen erkennen und weiß nicht, wie ich sie angehen soll. Hauptsächlich wie man ...
- Authentifizieren Sie Benutzer bei anderen Knoten ohne eine zentrale Berechtigung zur Überprüfung
- Koordinieren Sie, welche Knoten über welche anderen Knoten Bescheid wissen (Min-Max-Anzahl / nach Latenz / ???)
- Ermöglichen Sie einem bestimmten Benutzer zu bestimmen, ob ein anderer Benutzer (oder Knoten) online ist
- Behandeln Sie eine Situation, in der zwei Gruppen von Knoten physisch getrennt sind (Luftspalt) und wie Sie beim erneuten Verbinden der Gruppen erneut synchronisieren
- Usw.
Ich weiß, dass dies eine ziemlich offene Frage ist. Obwohl hochrangige Designmuster geschätzt würden, suche ich wirklich einen anständigen Leitfaden dafür, wie andere mit diesen Problemen umgegangen sind (und mit denen, die ich noch nicht in Betracht gezogen habe) ).