[Spostati qui al suggerimento di utenti SO (10k SO +) ]
Mi piacerebbe sviluppare un'applicazione peer-to-peer. Mentre ho molta esperienza nelle app LOB, sono nuovo nell'arena P2P.
Ho una vaga idea di come dovrebbero funzionare le cose, ma ho bisogno di altri dettagli per completare la mia comprensione.
Quello che so (credo) devo fare:
- Una parte significativa dei client deve abilitare le connessioni in entrata (regole di uPnP / NAT)
- I nodi dovrebbero condividere altri nodi conosciuti per fornire resilienza se uno specifico nodo scende
- È richiesta una qualche forma di sincronizzazione / ricerca del percorso per l'invio di dati tra client arbitrari
- Forse qualche sniffing di risorse per distinguere tra client "stupidi" e "super nodi" più potenti per gestire la sincronizzazione / condivisione degli elenchi di nodi e magari i messaggi di inoltro
- I client senza supporto in entrata dovrebbero tenere aperta una connessione in uscita attraverso la quale possono ricevere informazioni sui nodi per connettersi a
In breve, spero di offrire (in un primo momento) un servizio di chat / messaggistica che non si basa su una connessione a un particolare server centrale. Mentre immagino che avrò bisogno di fornire un numero di "supernodi" centralizzati per iniziare (o dopo aggiornamenti significativi), questi dovrebbero essere opzionali una volta stabilita una rete P2P funzionale.
Riesco a vedere un gran numero di problemi e non so come affrontarli. Principalmente come ...
- Autentica gli utenti ad altri nodi senza un'autorità centrale per verificare
- Coordina quali nodi conoscono quali altri nodi (numero min-max / per latenza / ???)
- Permetti a un determinato utente di determinare se un altro utente (o nodo) è online
- Gestire una situazione in cui 2 gruppi di nodi sono fisicamente disconnessi (airgapped) e come eseguire la risincronizzazione alla riconnessione dei gruppi
- Ecc ecc
So che questa è una domanda abbastanza aperta, quindi, mentre i modelli di design di alto livello sarebbero apprezzati, quello che cerco davvero è una guida decente su come gli altri hanno gestito questi problemi (e quelli che ho " t considerato ancora).