La correcta forma de distinguir entre los múltiples servicios mediante zeroconf

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

  •  22-12-2019
  •  | 
  •  

Pregunta

Estoy escribiendo una pieza de software que se ejecutará en los equipos así como los teléfonos.

El servicio utiliza una API HTTP para la comunicación y será publicada a través de la red local usando Zeroconf.

Inicialmente, la publicación de mi servicio mediante _http._tcp. como el tipo de servicio, pero pronto descubrí que mi NAS y mi receptor de música(!) también emisiones a sí mismos con el mismo tipo de servicio.

Así que la pregunta que ahora surge es cómo diferenciar entre mi servicio y otros servicios que están utilizando HTTP.

Alternativas

El uso de un diferente tipo de servicio

El es sin duda el más sin duda la manera más fácil y (casi) garantiza que no hay otros servicios será recogido.

Sin embargo, según Apple1 nuevos servicios debe estar registrado con la IANA.Obviamente, esto no es necesario pero viendo como se lo recomiendo se siente como sería la forma incorrecta de hacerlo

Mediante el registro TXT

Apple2 describe el registro TXT como este:

Cuando un servicio está registrado, tres relacionadas con los registros DNS se creó:un servicio (SRV) de registro, un puntero (PTR) de registro, y un texto (TXT) registro.El registro TXT que contiene los datos adicionales necesarios para resolver o utilizar el servicio, aunque también está vacía.

La duda se siente como que podría ser la forma correcta de hacerlo, pero todavía no estoy seguro y es difícil encontrar una descripción de lo que el campo debe contener.

Mi primera aunque sería algo como <service_name>-<version> que luego será analizada para ver qué servicio de lo que realmente es.

Mi NAS parece usar este para la identificación del modelo y los números de versión.

Trate de hablar con el servicio

Después de encontrar un servicio siempre se puede realizar una HEAD solicitud en un extremo y buscar un conocido encabezado establecidas por el servicio.

Esto se siente como una manera bastante lenta enfoque y quién sabe lo que hacer un HEAD solicitud a mi receptor va a hacer.


Y para que quede claro, esta pregunta no tiene nada que ver con un determinado lenguaje o framework, acerca de los conceptos de zeroconf.

Yo podría mostrar algo de código, pero no veo cómo eso podría ayudar.

¿Fue útil?

Solución

En primer lugar, ¿el servicio que la publicidad realmente cumplen con los requisitos para _http como se define por RFC 2782.Específicamente - es que no se acaba de utilizar HTTP para un transporte, pero también es:

  • se pueden visualizar mediante el "típico" de la web de software de cliente de explorador, y
  • está pensado principalmente para ser visto por un usuario humano.

Si no, registrar su propio tipo de servicio (hay un par de otros servicios que utiliza HTTP como transporte, pero no cumplen con esos requisitos por lo que tienen -http como un sufijo al nombre del servicio, ver pgpkey-http, senteo-http, xul-http).

Si sí, hay un par de maneras de ir en función de lo estricta que la interpretación de la RFC es.El menos estricto se acaba de añadir un TXT récord como ya has notado en tu pregunta.iTunes se registra con un TXT registro en el formato iTSh Version=196618.

Si te sientes un poco más estricta, el RFC sólo se establece expresamente que el u=, p= y path= TXT existen registros para HTTP.Tal vez alguien puede meter su cuchara en esto, pero no he visto mucho debate sobre si la adición de registros TXT a las entradas, es mal visto o no.Así que con eso, la otra forma es simplemente un algoritmo nombre de instancia.Por ejemplo, al agregar el sufijo "-NicklasAService" al nombre del dispositivo.Esperemos que dar un nombre único a la red local, pero aún, haciendo que el servicio puede ser fácilmente recogidos por el registro PTR buscando el sufijo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top