Domanda

Sto scrivendo un software che verrà eseguito su computer e telefoni.

Il servizio utilizza un'API HTTP per la comunicazione e verrà pubblicata sulla rete locale utilizzando Zeroconf.

Inizialmente ho pubblicato il mio servizio utilizzando _http._tcp. come tipo di servizio ma ho scoperto rapidamente che sia il mio NAS che il mio ricevitore musicale (!) Trasforma anche se stessi con quel tipo di servizio esatto.

Quindi la domanda ora sorge come differenziare tra il mio servizio e altri servizi che utilizzano http.

alternative

Utilizzo di un tipo di servizio diverso

È certamente il più sicuramente il modo più semplice e (quasi) garantisce nessun altro servizio verrà raccolto.

Tuttavia, secondo Apple 1 nuovi servizi dovrebbe essere registrati con IANA. Questo è ovviamente richiesto ma visto come lo consigliano che si sente come sarebbe il modo sbagliato di farlo

Utilizzo del record TXT

Apple 2 Descrive il record TXT come questo:

.

Quando viene registrato un servizio, vengono creati tre record DNS correlati: un record di servizio (SRV), un record del puntatore (PTR) e un record del puntatore (PTR) e un record di testo (TXT). Il record TXT contiene dati aggiuntivi necessari per risolvere o utilizzare il servizio, anche se è spesso vuoto.

Il certamente sembra che potrebbe essere il modo giusto per farlo, ma non sono ancora sicuro ed è difficile trovare una descrizione di ciò che il campo dovrebbe contenere.

Il mio primo sebbene sarebbe quello di mettere qualcosa come <service_name>-<version> che sarà poi analizzato per vedere quale servizio è effettivamente.

I miei nas sembra usarlo per identificare il modello e i numeri di versione.

prova a parlare con il servizio

Dopo aver trovato un servizio si potrebbe sempre eseguire una richiesta HEAD su un endpoint noto e cercare un intestazione conosciuta dal servizio.

Ciò si sente come un approccio abbastanza lento e chi sa cosa farà una richiesta HEAD al mio ricevitore.


.

E solo per essere chiaro, questa domanda non ha nulla a che fare con una lingua o un framework specifico, si tratta dei concetti di Zeroconf.

Potrei mostrare un codice ma non vedo come avrebbe aiutato.

È stato utile?

Soluzione

In primo luogo, il servizio che stai pubblicizzando in realtà soddisfano le qualifiche per _http come definito da RFC 2782 . In particolare, non è solo l'utilizzo di http per un trasporto ma è anche:

    .
  • può essere visualizzato con il software client del browser Web "tipico" e
  • è inteso principalmente da visualizzare da un utente umano.

Se no, registra il tuo tipo di servizio (ci sono un paio di altri servizi che utilizzano HTTP come trasporto ma non soddisfano tali qualifiche in modo da avere -http come suffisso al nome del servizio, vedere pgpkey-http, senteo-http, xul-http) .

Se sì, ci sono un paio di modi per andare a seconda di quanto sia rigorosa l'interpretazione della RFC. Il meno rigido per aggiungere solo un disco txt come hai già notato nella tua domanda. Itunes si registra con un record txt nel formato iTSh Version=196618.

Se si sente un po 'più rigidi, l'RFC afferma esplicitamente che esistono i record u=, p= e path= TXT per HTTP. Forse qualcuno può accendersi su questo, ma non ho visto molta discussione sul fatto che l'aggiunta di record TXT per le voci già esistenti sia accigliato o meno. Quindi, con quello, l'altro modo è solo un nome di istanza algoritmico. Ad esempio, aggiungendo il suffisso "-nicklasaservice" al nome del dispositivo. Speriamo di dargli un nome univoco alla rete locale, ma lo rendono ancora in modo che il servizio possa essere facilmente scelto dal record PTR semplicemente cercando il suffisso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top