Pergunta

Eu estou escrevendo uma peça de software que será executado em computadores assim como os telefones.

O serviço utiliza uma API de HTTP para a comunicação e, será publicado através de uma rede local usando Zeroconf.

Inicialmente eu publiquei o meu serviço usando _http._tcp. como o tipo de serviço, mas rapidamente descobri que a minha NAS e meu receptor de música(!) também difunde-se com esse exato tipo de serviço.

Assim, a questão que agora se coloca como diferenciar entre o meu serviço e outros serviços que estão usando HTTP.

Alternativas

Usando um diferente tipo de serviço

O é certamente o mais, certamente, a maneira mais fácil e (quase) garantias de nenhum outro serviço vai ser pego.

No entanto, de acordo com a Apple1 novos serviços deve ser registrados com IANA.Esta é, obviamente, não é necessário, mas vendo como eles recomendam que ela sente como seria a forma errada de fazê-lo

Usando o registro de TXT

Apple2 descreve o registro TXT como este:

Quando um serviço é registrado, três registros DNS são criados:um serviço (SRV), um ponteiro (PTR), e um texto (TXT) grave.O registro TXT que contém dados adicionais necessários para resolver ou usar o serviço, embora ele também está sempre vazia.

Certamente se sente como se pudesse ser o caminho certo para fazê-lo, mas ainda não tenho certeza e é difícil encontrar uma descrição do que o campo deve conter.

Meu primeiro seria colocar algo como <service_name>-<version> que será, então, ser analisada para ver qual o serviço que ele realmente é.

Meu NAS parece utilizar isto para a identificação do modelo e números de versão.

Tente falar com o serviço de

Depois de encontrar um serviço, pode-se sempre realizar uma HEAD pedido em um conhecido ponto de extremidade e olhar para um conhecido cabeçalho definido pelo serviço.

Este se sente como um bastante lento, abordagem e quem sabe o que fazer uma HEAD pedido para o meu receptor irá fazer.


E só para deixar claro, essa pergunta não tem nada a ver com uma linguagem específica ou quadro, é sobre os conceitos de zeroconf.

Eu poderia mostrar algum código, mas não vejo como isso iria ajudar.

Foi útil?

Solução

Primeiro, faz o serviço que está a anunciar, na verdade, atender as qualificações para _http conforme definido pela RFC 2782.Especificamente - é não apenas usando HTTP para um transporte, mas também é:

  • pode ser apresentado por "típico" cliente de navegador da web de software, e
  • é destinado principalmente para ser visualizado por um usuário humano.

Se nenhum, registe o seu próprio tipo de serviço (há um par de outros serviços que usam o HTTP como transporte, mas não atender as qualificações para que eles tenham -http como um sufixo para o nome de serviço, consulte pgpkey-http, senteo-http, xul-http).

Se sim, há um par de maneiras de ir, dependendo de como estrita uma interpretação da RFC é.A menos rigorosa, sendo apenas a adição de um TXT registro como você já anotou na sua pergunta.o iTunes regista-se com um TXT gravado no formato iTSh Version=196618.

Se você está se sentindo um pouco mais rigorosa, a RFC apenas afirma explicitamente que o u=, p= e path= Registros TXT existem para HTTP.Talvez alguém possa dialogar sobre isso, mas eu não vi muita discussão sobre se a adição de registros TXT para as já existentes entradas é desaprovado ou não.Então, com isso, a outra forma é apenas uma algorítmico nome de instância.Por exemplo, adicionando o sufixo "-NicklasAService" para o nome do dispositivo.Esperamos que, dando-lhe um nome exclusivo para a rede local, mas ainda fazendo com que o serviço pode ser facilmente recolhida pelo registro PTR apenas olhando para o sufixo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top