Richtige Methode zur Unterscheidung zwischen mehreren Diensten mithilfe von Zeroconf

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

  •  22-12-2019
  •  | 
  •  

Frage

Ich schreibe eine Software, die sowohl auf Computern als auch auf Telefonen läuft.

Der Dienst nutzt eine HTTP-API für die Kommunikation und wird mit Zeroconf über das lokale Netzwerk veröffentlicht.

Ursprünglich habe ich meinen Dienst mit veröffentlicht _http._tcp. Als Diensttyp habe ich jedoch schnell festgestellt, dass sowohl mein NAS als auch mein Musikreceiver(!) sich selbst mit genau diesem Diensttyp senden.

Es stellt sich nun die Frage, wie ich meinen Dienst von anderen Diensten unterscheiden kann, die HTTP verwenden.

Alternativen

Verwendung eines anderen Diensttyps

Dies ist mit Sicherheit der einfachste Weg und garantiert (fast) garantiert, dass keine anderen Dienste in Anspruch genommen werden.

Allerdings laut Apple1 neue Dienstleistungen sollen bei der IANA registriert sein.Dies ist natürlich nicht erforderlich, aber da sie es empfehlen, scheint es der falsche Weg zu sein

Verwendung des TXT-Datensatzes

Apfel2 beschreibt den TXT-Eintrag wie folgt:

Wenn ein Dienst registriert wird, werden drei zugehörige DNS-Einträge erstellt:ein Dienstdatensatz (SRV), ein Zeigerdatensatz (PTR) und ein Textdatensatz (TXT).Der TXT-Eintrag enthält zusätzliche Daten, die zum Auflösen oder Verwenden des Dienstes erforderlich sind, ist jedoch häufig auch leer.

Das scheint auf jeden Fall der richtige Weg zu sein, aber ich bin mir immer noch nicht sicher und es ist schwierig, eine Beschreibung dessen zu finden, was das Feld enthalten sollte.

Mein erster Gedanke wäre jedoch, so etwas zu sagen <service_name>-<version> die dann analysiert wird, um zu sehen, um welchen Dienst es sich tatsächlich handelt.

Mein NAS scheint dies zur Identifizierung von Modell- und Versionsnummern zu verwenden.

Versuchen Sie, mit dem Dienst zu sprechen

Nachdem man einen Dienst gefunden hatte, konnte man jederzeit einen durchführen HEAD Anfrage an einen bekannten Endpunkt stellen und nach einem bekannten Header suchen, der vom Dienst festgelegt wurde.

Das fühlt sich wie ein ziemlich langsamer Ansatz an und wer weiß, was das bedeutet HEAD Eine Anfrage an meinen Empfänger genügt.


Und um es klarzustellen: Diese Frage hat nichts mit einer bestimmten Sprache oder einem bestimmten Framework zu tun, sondern mit den Konzepten von Zeroconf.

Ich könnte etwas Code zeigen, aber ich verstehe nicht, wie das helfen würde.

War es hilfreich?

Lösung

Erstens: Entspricht die von Ihnen beworbene Dienstleistung tatsächlich den Anforderungen? _http wie definiert durch RFC 2782.Konkret: Wird nicht nur HTTP für den Transport verwendet, sondern auch:

  • kann von „typischer“ Webbrowser-Client-Software angezeigt werden, und
  • ist in erster Linie dazu gedacht, von einem menschlichen Benutzer angezeigt zu werden.

Wenn nein, registrieren Sie Ihren eigenen Diensttyp (es gibt einige andere Dienste, die HTTP als Transport verwenden, diese Qualifikationen aber nicht erfüllen -http als Suffix zum Dienstnamen, siehe pgpkey-http, senteo-http, xul-http).

Wenn ja, gibt es mehrere Möglichkeiten, je nachdem, wie streng die RFC-Auslegung ist.Die am wenigsten strenge Methode besteht darin, einfach ein hinzuzufügen TXT Aufzeichnen, wie Sie bereits in Ihrer Frage bemerkt haben.iTunes registriert sich bei a TXT im Format aufzeichnen iTSh Version=196618.

Wenn Sie es etwas strenger meinen: Der RFC gibt nur ausdrücklich an, dass die u=, p= Und path= Für HTTP sind TXT-Einträge vorhanden.Vielleicht kann sich jemand dazu äußern, aber ich habe keine große Diskussion darüber gesehen, ob das Hinzufügen von TXT-Einträgen zu bereits vorhandenen Einträgen verpönt ist oder nicht.Der andere Weg besteht also darin, einfach einen algorithmischen Instanznamen zu verwenden.Fügen Sie beispielsweise dem Gerätenamen das Suffix „-NicklasAService“ hinzu.Hoffentlich geben wir ihm einen eindeutigen Namen für das lokale Netzwerk, sorgen aber dennoch dafür, dass der Dienst im PTR-Datensatz leicht erkannt werden kann, indem einfach nach dem Suffix gesucht wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top