Listener, connettori ed endpoint NDKPI
Un consumer NDK connette un connettore NDK chiamando la funzione NdkConnect (NDK_FN_CONNECT) o NdkConnectWithSharedEndpoint (NDK_FN_CONNECT_WITH_SHARED_ENDPOINT).
Ogni connettore che si trova in uno stato connesso ha anche un endpoint sottostante che rappresenta la fine locale della connessione NDK stabilita:
- Un connettore stabilito accettando una connessione in ingresso su un listener NDK eredita automaticamente l'endpoint implicito del listener come endpoint implicito locale.
- Un connettore connesso tramite la funzione NdkConnect ha un proprio endpoint locale implicito dedicato.
- Un connettore connesso tramite la funzione NdkConnectWithSharedEndpoint ha un endpoint locale esplicito che può essere condiviso con altri connettori connessi anche tramite la funzione NdkConnectWithSharedEndpoint .
Il provider NDK deve mantenere un certo numero di riferimenti per ogni endpoint implicito o esplicito e rilasciare l'endpoint (ad esempio, contrassegnare l'indirizzo/porta come disponibile per essere usato di nuovo) quando il conteggio dei riferimenti raggiunge lo zero:
Conteggio dei riferimenti per gli endpoint (non condivisi)
Quando il consumer chiama la funzione NdkListen (NDK_FN_LISTEN), il provider crea un endpoint implicito. Per questo endpoint implicito, il provider deve mantenere un conteggio dei riferimenti nel modo seguente:
Aggiungere un riferimento per il listener stesso al conteggio dei riferimenti dell'endpoint.
Aggiungere un riferimento per ogni connettore accettato su tale listener.
Rimuovere un riferimento quando un connettore accettato in precedenza sul listener viene chiuso.
Rimuovere un riferimento quando il listener stesso viene chiuso. Nota Non è possibile chiudere il listener finché non vengono chiusi tutti i connettori.
Rilasciare l'endpoint quando il conteggio dei riferimenti torna a zero. Questo è il caso solo quando il listener e tutti i connettori accettati sul listener sono stati chiusi.
La semplice chiusura del listener non rilascia l'endpoint purché siano presenti connettori accettati in precedenza che non sono ancora chiusi. Ciò significa che le nuove richieste NdkListen, NdkConnect e NdkConnectWithSharedEndpoint per lo stesso indirizzo locale e la porta avranno esito negativo fino alla chiusura di tutte queste connessioni. Si noti che anche la richiesta di chiusura nel listener rimarrà in sospeso fino a quando tutte queste connessioni non vengono chiuse (a causa delle regole precedenti a livello di durata degli oggetti KPII descritte in Requisiti relativi alla durata degli oggetti KPI). Il provider deve rifiutare ulteriori connessioni in ingresso nel listener non appena viene eseguita una richiesta di chiusura (in modo che non vengano accettate nuove connessioni mentre la richiesta di chiusura è in sospeso).
Conteggio dei riferimenti per i connettori
Quando il consumer chiama NdkConnect, il provider crea e implicitamente l'endpoint. Per questo endpoint implicito, il provider deve:
- Aggiungere un riferimento dal connettore. È presente un solo connettore, di conseguenza un solo riferimento.
- Rimuovere il riferimento del connettore all'endpoint quando il connettore viene chiuso.
- Rilasciare l'endpoint quando il riferimento non è più presente.
Conteggio dei riferimenti per gli endpoint condivisi
Quando il consumer chiama NdkConnectWithSharedEndpoint, il provider crea un endpoint condiviso esplicito. Per questo endpoint condiviso esplicito, il provider deve:
- Aggiungere un riferimento per l'endpoint condiviso stesso al conteggio dei riferimenti dell'endpoint condiviso.
- Aggiungere un riferimento per ogni connettore connesso tramite tale endpoint condiviso.
- Rimuovere un riferimento quando un connettore connesso in precedenza tramite l'endpoint condiviso viene chiuso.
- Rilasciare l'endpoint il conteggio dei riferimenti torna a zero. Questo è il caso in cui l'endpoint condiviso e tutti i connettori connessi tramite l'endpoint condiviso siano stati chiusi.
- La semplice chiusura dell'endpoint condiviso non rilascia l'endpoint purché siano presenti connettori connessi in precedenza non ancora chiusi. Ciò significa che le nuove richieste NdkListen, NdkConnect e NdkConnectWithSharedEndpoint per lo stesso indirizzo locale e la porta avranno esito negativo fino alla chiusura di tutte queste connessioni. Si noti che anche la richiesta di chiusura nell'endpoint condiviso rimarrà in sospeso fino a quando tutte queste connessioni non vengono chiuse (a causa delle regole antecedent/successori descritte in Requisiti relativi alla durata degli oggetti NDKPI).