Qual será o resultado do seguinte cenário de conexão em uma rede MQTT?

7

No MQTT, é o cliente que inicia a conexão com uma mensagem CONNECT.

Parâmetros do Pacote MQTT Connect

O primeiro campo do pacote é o clientId:

O identificador de cliente (ClientId curto) é um identificador de cada cliente MQTT que está se conectando a um broker MQTT. Como o identificador de palavras já sugere, ele deve ser exclusivo por corretor. O broker utiliza-o para identificar o cliente e o estado atual do cliente. (Imagem e citação são tiradas daqui .)

Agora, digamos que eu tenho dois clientes, o cliente X e Y na seguinte situação.

  1. Broker lançado, ainda não há clientes.
  2. O X se conecta com êxito ao broker com client-1id, nome de usuário é X.
  3. Agora, Y tenta se conectar usando client-1como id, nome de usuário é Y.

O que vai acontecer?

  1. Com base no clientId, o intermediário pensará que X executa uma tentativa repetida de conexão que é um comportamento anormal .
  2. Nada de extraordinário vai acontecer. Y se conecta com sucesso, pois usa um nome de usuário diferente .
  3. Nada de extraordinário vai acontecer. O broker rejeitará a tentativa de conexão Y, pois o clientId fornecido já está em uso.
Bence Kaulics
fonte

Respostas:

6

Se clientidfor o mesmo, no MQTT, a especificação diz que você deve considerá-los o mesmo cliente! Provavelmente Y deve ser conectado usando o Ide Xdeve ser desconectado.

Esta parte é da documentação:

Se a validação for bem-sucedida, o servidor executa as seguintes etapas.

  1. Se o ClientId representa um cliente já conectado ao servidor, o servidor DEVE desconectar o cliente existente [MQTT-3.1.4-2].

  2. O servidor DEVE executar o processamento da CleanSession descrito na seção 3.1.2.4 [MQTT-3.1.4-3].

  3. O servidor deve reconhecer o pacote CONNECT com um pacote CONNACK contendo um código de retorno zero [MQTT-3.1.4-4].

  4. Inicie a entrega da mensagem e mantenha o monitoramento ativo.

Consulte esta documentação para obter mais detalhes.

ThisaruG
fonte
2
Esta parece ser a resposta correta, mas pode ser útil vincular e citar a parte relevante da especificação (a parte principal é "Se o ClientId representar um cliente já conectado ao servidor, o servidor DEVE desconectar o cliente existente")
Aurora0001
3
Eu negligenciei essa parte de alguma forma, mas é surpreendente. Um cliente prejudicial pode forçar o corretor a desconectar outros clientes?
Bence Kaulics