Come può il mio server annunciare la sua presenza a tutti gli utenti della rete [chiuso]


-1

La situazione è la seguente. Voglio avere un'applicazione in esecuzione su un server. Tutti i desktop dell'azienda devono connettersi ad esso. Ma non voglio che l'indirizzo IP del server sia codificato in modo rigido nelle app desktop. Piuttosto voglio che il server sia in grado di annunciarsi da alcuni meccanismi di trasmissione. Le app desktop starebbero ascoltando un tale messaggio e quindi conosceranno l'indirizzo IP del server e potranno quindi connettersi ad esso

Come posso farlo ? Devo aver bisogno di usare il multicast? Fino a che punto arrivano i messaggi multicast? In che modo le app desktop possono ascoltare i dati multicast?

Risposte:


1

Il metodo più comune per questo è usare normale ordinario DNS . La tua azienda ha probabilmente il proprio nome di dominio; possibilmente uno interno; basta aggiungere un sottodominio sotto di esso - myapp.internal.example.com o myapp.corp o qualcosa del genere - e puntare all'indirizzo del tuo server.

myapp.<domain>.         A       10.0.0.5
myapp.<domain>.         AAAA    2001:db8::123:4

(Dopo tutto, è a server , il suo indirizzo IP non cambierà probabilmente settimanalmente. E quando cambia, tutto ciò che devi aggiornare è il sottodominio in DNS.)

Puoi renderlo più avanzato e utilizzare Record SRV invece di record di indirizzi A / AAAA diretti. Ad esempio, il protocollo di chat XMPP utilizza i record SRV per individuare i server per un dominio, che possono essere multipli con priorità diverse:

chat1.<domain>.         A       10.0.0.4
chat2.<domain>.         A       10.0.0.7

                                ; priority, weight, port, hostname
_xmpp._tcp.<domain>.    SRV      0 0 5222 chat1.<domain>.
_xmpp._tcp.<domain>.    SRV     10 0 5222 chat1.<domain>.

Questo è più complesso per le app poiché ora hanno bisogno di una logica per ordinare i record restituiti in base alla priorità SRV e poi in base al peso, ma potrebbe offrire alcuni vantaggi, ad esempio la possibilità di aggiungere server "di backup" più lenti.


Se per qualche motivo non è accettabile, puoi provare uno degli esistenti basati su multicast protocolli di scoperta del servizio . (Alcuni di essi combinano la risoluzione dei nomi e l'individuazione dei servizi in uno, altri la tengono separata).

  • Apple e varie distribuzioni Linux usano Bonjour / Avahi aka mDNS ("Multicast DNS") combinato con DNS-SD sia per l'individuazione di servizi generali che per la risoluzione dei nomi locali;

  • Microsoft preferisce l'UPnP-based SSDP , tranne quando preferisce WS-Discovery anziché. Ha usato NetBIOS in passato. Tutti sono documentati sotto Provider di funzioni .

  • (Alcuni programmi decidono di trasmettere solo datagrammi UDP che dicono "Sono qui!" Nel loro formato personalizzato. Questo non funziona bene).

Solitamente sono presenti API fornite dal sistema operativo e librerie di terze parti per cercare servizi specifici utilizzando il protocollo di rilevamento corrispondente.

Se hai intenzione di implementare qualcosa da te, ogni sistema operativo fornisce anche funzioni a unisciti a un gruppo multicast e per ricevere messaggi che qualcuno invia a quel gruppo. Multicast IP dovrebbe funzionare di default all'interno di un dominio di broadcast, ma spesso deve essere configurato per passare i router .


Una cosa che ho dimenticato di menzionare è che il server deve essere all'interno della rete interna di un'azienda. Non voglio avere il server di dominio pubblico. Se è nel dominio locale, anche in questo caso è necessario un registro che dovrebbe risolvere il nome che molte società potrebbero non avere o il file hosts deve essere aggiornato. Si noti che anche il software del lato client appartiene a me, ma l'indirizzo IP del server può continuare a cambiare a causa del DHCP. Quindi pensavo che i client potevano eseguire il multicast e ottenere l'indirizzo del server quando si avviavano e il server può eseguire il multicast quando si riavvia e informa il suo indirizzo IP.
Raks
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.