Giter VIP home page Giter VIP logo

arquitectura_p2p_elixir's Introduction

Presentación de la arquitectura

Arquitectura P2P semi centralziada

La arquitectura propuesta es una red Peer-to-Peer (P2P) semi-centralizada. En este modelo, los nodos o "peers" se comunican directamente entre sí para el intercambio de mensajes, suscripción a otros peers, y gestión de perfiles. Un componente centralizado, conocido como "SuperPeer" o supervisor dinámico e el código, facilita la creación y gestión de estos nodos, actuando como un punto de registro y coordinación inicial. Esta arquitectura combina las ventajas de las redes descentralizadas con la gestión centralizada para mejorar la eficiencia, el descubrimiento de servicios y la robustez.

Diseño de la arquitectura

Ver Diagrama de contexto

Ver Diagrama de contenedores

Ver Diagrama de componentes

Ver Diagrama de Secuencia

Testing

Los tests implementados son para el módulo Peer e incluyen:

Tests de Integración: Verifican la comunicación y el correcto funcionamiento entre peers, incluyendo el inicio y detención de procesos Peer, envío y recepción de mensajes, actualización y consulta de perfiles, y gestión de suscripciones.

Tests de Comportamiento: Aseguran que la lógica de negocio (como la suscripción y notificación entre peers) funcione según lo esperado. Estos tests están diseñados para asegurar que las funcionalidades clave del módulo Peer operen correctamente bajo diversas condiciones.

Para ejecutar los test se usará el siguiente comando:

mix test

Uso

En el caso de que se quiera ejecutar en modo interactivo para probar la arquitectura a tiempo real se debe ejecutar el siguiente comando:

iex -S mix

Una vez en la terminal se inicializará el superPeer que gestionará los Peers de forma automática y el registro de Peers, para inicializar Peers hay que ejecutar lo siguiente:

{:ok, _peer1} = Peer.start_link("peer1")
{:ok, _peer2} = Peer.start_link("peer2")
{:ok, _peer3} = Peer.start_link("peer3")

Para listar los Peers activos:

Peer.list_peers()

Para mandar un mensaje a un Peer:

Peer.send_message("peer2", "Hello, peer2 from peer1!")

Para recivir mensajes de un Peer:

Peer.get_messages("peer2")

Para actualizar un perfil y consultar su información:

Peer.update_profile("peer1", %{bio: "Just a peer in the P2P world", status: "online"})
Peer.get_profile("peer1")

Para que un Peer se suscriba a otro para que escuchar activamente los mensajes de ese Peer:

Peer.subscribe_to("peer2", "peer1")

Para detener un Peer

Peer.stop("peer1")

arquitectura_p2p_elixir's People

Contributors

wizzzstark avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.