Bonne façon de faire la distinction entre plusieurs services à l'aide de zeroconf

StackOverflow https://stackoverflow.com//questions/21052626

  •  22-12-2019
  •  | 
  •  

Question

Je suis en train d'écrire un morceau de logiciel qui s'exécute sur les ordinateurs ainsi que les téléphones.

Le service utilise une API HTTP pour la communication et sera publié sur le réseau local à l'aide de Zeroconf.

Au départ, j'ai publié mon service à l'aide de _http._tcp. comme le type de service, mais j'ai rapidement découvert que mon NAS et mon récepteur de musique(!) aussi les émissions elles-mêmes avec le même type de service.

Donc, la question qui se pose maintenant est comment faire la différence entre mon service et d'autres services utilisant le protocole HTTP.

Alternatives

En utilisant un autre type de service

Les est certainement le plus certainement la façon la plus simple et (presque) garantit pas à d'autres services seront ramassés.

Toutefois, selon Apple1 de nouveaux services devrait être enregistré auprès de l'IANA.Ce n'est évidemment pas obligatoire mais, voyant que le recommander, il se sent comme il serait de la mauvaise façon de le faire

À l'aide de l'enregistrement TXT

Apple2 décrit l'enregistrement TXT comme ceci:

Lorsqu'un service est enregistré trois enregistrements DNS sont créés:un service (SRV) enregistrement, un pointeur (PTR) d'enregistrement, et un texte (TXT) d'enregistrement.L'enregistrement TXT contient des données supplémentaires sont nécessaires pour résoudre ou utiliser le service, même s'il est souvent vide.

La certainement se sent comme il pourrait être la bonne façon de le faire, mais je ne suis pas encore sûr, et il est difficile de trouver une description de ce champ doit contenir.

Mon premier serait de mettre quelque chose comme <service_name>-<version> qui seront ensuite analysés afin de voir de quel service il est réellement.

Mon NAS semble l'utiliser pour l'identification du modèle et les numéros de version.

Essayez de parler au service

Après la découverte d'un service dont on peut toujours effectuer une HEAD demande sur un point de terminaison et de regarder pour un en-tête défini par le service.

Cela se sent comme un assez lente approche et qui sait de quoi faire un HEAD demande à mon récepteur ne.


Et juste pour être clair, cette question n'a rien à voir avec une langue spécifique ou d'un cadre, c'est sur les concepts de zeroconf.

Je pourrais montrer un peu de code mais je ne vois pas comment cela pourrait aider.

Était-ce utile?

La solution

D'abord, le service dont vous faites la publicité de la rencontre, les qualités requises pour _http tel que défini par RFC 2782.En particulier - n'est-il pas juste d'utiliser HTTP pour le transport mais c'est aussi:

  • peut être affichée en "typique" du navigateur web, logiciel client, et
  • est destiné principalement à être vu par un utilisateur humain.

Si aucun, enregistrer votre propre type de service (il y en a une couple d'autres services qui utilisent le protocole HTTP comme le transport, mais ne respectent pas ces qualifications de sorte qu'ils ont -http comme suffixe le nom du service, voir pgpkey-http, senteo-http, xul-http).

Si oui, il ya un couple de façons de le faire en fonction de combien de stricte interprétation de la RFC est.Le moins strict, d'être simplement l'ajout d'un TXT enregistrement comme vous l'avez déjà noté dans votre question.iTunes enregistre avec un TXT enregistrement dans le format iTSh Version=196618.

Si vous vous sentez un peu plus strict, le RFC seulement stipule explicitement que l' u=, p= et path= Enregistrements TXT existent pour HTTP.Peut-être que quelqu'un peut mentionner à ce sujet, mais je n'ai pas vu beaucoup de discussions à savoir si l'ajout d'enregistrements TXT déjà entrées existantes, c'est mal vu ou pas.Donc, avec cela, l'autre façon, c'est juste un algorithme pour le nom de l'instance.Par exemple, en ajoutant le suffixe "-NicklasAService" du nom du périphérique.Espérons-le en lui donnant un nom unique pour le réseau local, mais toujours en faisant en sorte que le service peut facilement être choisi par l'enregistrement PTR par le suffixe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top