[Movido aquí por sugerencia de usuarios de SO (10k SO +) ]
Me gustaría desarrollar una aplicación de igual a igual. Si bien tengo mucha experiencia en aplicaciones LOB, soy nuevo en el campo P2P.
Tengo una idea aproximada de cómo deberían funcionar las cosas, pero necesito algunos detalles más para completar mi comprensión.
Lo que sé (creo) que debo hacer:
- Una proporción importante de clientes necesita habilitar conexiones entrantes (reglas de uPnP / NAT de ala)
- Los nodos deben compartir otros nodos conocidos para proporcionar resistencia si algún nodo en particular se cae
- Se requiere alguna forma de sincronización / búsqueda de ruta para enviar datos entre clientes arbitrarios
- Posiblemente, algún rastreo de recursos para diferenciar entre clientes "tontos" y "supernodos" más potentes para manejar la sincronización / intercambio de listas de nodos y tal vez transmitir mensajes
- Los clientes sin soporte entrante deben mantener abierta una conexión saliente a través de la cual pueden recibir información de nodos para conectarse
En resumen, espero ofrecer (al principio) un servicio de chat / mensajería que no dependa de una conexión a ningún servidor central en particular. Si bien imagino que tendré que suministrar una serie de "supernodos" centralizados para comenzar (o después de actualizaciones significativas), estos deberían ser opcionales una vez que se haya establecido una red P2P funcional.
Puedo ver una serie de problemas y no sé cómo abordarlos. Principalmente cómo ...
- Autenticar usuarios a otros nodos sin una autoridad central para verificar
- Coordine qué nodos saben sobre qué otros nodos (número mínimo-máximo / por latencia / ???)
- Permitir que un usuario determinado determine si otro usuario (o nodo) está en línea
- Lidiar con una situación en la que 2 grupos de nodos están físicamente desconectados (sin aire) y cómo volver a sincronizar la reconexión de los grupos
- Etcétera etcétera
Sé que esta es una pregunta bastante abierta, por lo que si bien se agradecerían los patrones de diseño de alto nivel, lo que realmente estoy buscando es una guía decente sobre cómo otros han manejado estos problemas (y los que aún no he considerado )
fuente
Respuestas:
fuente