Skip to the content.

Wiadomości

Każda wiadomość używana przy komunikacji między nodami ma postać pliku json o następującym formacie:

{
    "header":
    {
        "sender": <node_id>, 
        "receiver": <node_id | -1>, 
        "message_type": <message_type>
    }, 
    "body":
    { 
        --payload--
    }
}

header składa się z pól:

Pole body zawiera ciało odpowiednie dla danego typu wiadomości.

Pytanie o listę nodów i nowe id

"message_type": "get_init"

Jest to wiadomość unicast do publicznego głównego noda. Pole sender i receiver są puste, ponieważ wysyłający nie ma informacji o sieci.

"body":
{ 

}

Odpowiedź z listą nodów i nowym id

"message_type": "give_init"

Unicast od publicznego głównego noda do noda pytającego. Zawiera listę adresów publicznych nodów, listę nodów prywatnych oraz identyfikator zgłaszającego się noda.

"body":
{
    "your_new_id": <node_id>,
    "public_nodes":
    [
        {"id": <node_id>, "ip_address":<ip_address>}
    ],
    "private_nodes":
    [
        {"id": <node_id>}
    ]
}

Wiadomość powitalna

"message_type": "hello"

Pierwsza wiadomość służąca do poinformowania innych nodów o dołączeniu do sieci. Pole ip zawiera adres ip nadawcy jeśli posiada publiczny adres ip. W przeciwnym przypadku jest puste.

"body":
{
    "ip": <ip_address | null>,
}

Pytanie o postęp obliczeń

"message_type": "get_progress"

Jest to wiadomość unicast do losowego noda. Wysyłana po utworzeniu połączeń z pozostałymi nodami.

"body":
{ 

}

Odpowiedź z postępem obliczeń

"message_type": "give_progress"

Unicast od pytanego noda do noda pytającego. Zawiera stan zadań.

"body":
{
    "progress": --suitable--
}

Heart beat

"message_type": "heart_beat"

Co ustalony czas broadcast informujący o aktywaności noda w sieci. Jeśli pierwszy node nie otrzyma takiej wiadomości od drugiego, po pewnym czasie uznaje ten drugi za odłączony.

"body":
{
    
}

Zajmuję dane

"message_type": "reserve"

Broadcast informujący pozostałe nody, że nadawca zajmuje dane zadanie.

"body":
{
    "task_id": <task_id>
}

Potwierdzenie zajęcia danych

"message_type": "confirm"

Unicast od noda informowanego do informującego. Wysyłany po otrzymaniu wiadomości zajmuję dane oraz zaktualizowaniu lokalnego Stanu. Służy do synchronizacji struktur stanów zadań.

"body":
{
    "task_id": <task_id>,
    "state": <"free" | "reserved" | "calculated">,
    "owner": <null | node_id>,
    "result": <null | result_obj>
}

Obliczyłem

"message_type": "calculated"

Informuje, że dane zadanie zostało wykonane. Przesyła wynik zadania.

"body":
{
    "task_id": <task_id>,
    "result": --suitable--
}

Pytanie o synchronizację niedokończonych zadań

"message_type": "get_synchronization"

Unicast z listą zadań, które wymagają synchronizacji. Wysyłany w momencie, gdy ostatnie zadanie zostało zajęte według stanu lokalnego. Prośba o odesłanie stanu zadań skierowana jest bezpośrednio do noda, który miał liczyć dane zadania (jeśli więcej nodów liczy zadania, do każdego jest wysyłane osobne pytanie tylko o jego zadania).

"body":
{
    "tasks": [
        {"task_id": <task_id>}
    ]
}

Odpowiedź synchronizująca zadania

"message_type": "give_synchronization"

Wiadomość unicast z listą stanów zadań, o które pytał adresat.

"body":
{
    "tasks": [
        {
            "task_id": <task_id>,
            "state": <"free" | "reserved" | "calculated">,
            "owner": <null | node_id>,
            "result": <null | result_obj>
        }
    ]
}

Home