Comprimento máximo das credenciais (nome de usuário, senha, cliente) no MQTT v3.1.1
O pacote CONNECT
O pacote de Controlo MQTT CONNECT contém sempre uma carga útil. É o primeiro pacote, que o cliente deve enviar para o servidor após a conexão ser estabelecida.
Ele só pode ser enviado uma vez pelo cliente, se um segundo pacote CONNECT for enviado, o servidor (corretor) deve processá-lo como uma violação do protocolo e desconectar o cliente.
A carga útil pode conter vários campos diferentes:
- identificador único de Cliente (clientid) - sempre presente
- tema do testamento
- mensagem de vontade
- nome de utente
- senha (requer que o nome do usuário também esteja presente!)
O cliente é obrigatório, os outros campos são opcionais. A presença dos campos opcionais é determinada por bandeiras no cabeçalho.
Imagem da tela: OASIS Open MQTT v3.1.1 spec
Limites
Aqui estão os limites que devem ser suportados pelos corretores cumpridores:
- clientid: 23 bytes codificados UTF-8
- nome do usuário no máximo. 655535 bytes após a codificação (codificado UTF-8)
- senha: 0 a 65535 bytes de dados binários
- tamanho limite de mensagem: 268435455 bytes
Os seguintes caracteres para a identificação do cliente são necessário a ser suportado por qualquer corretor que se reúna com o MQTT v3.1.1 spec:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Outros caracteres e identificações de clientes mais longas podem ser suportados opcionalmente pelo corretor.
23 caracteres é muito. Lembre-se, estes não são pedaços, mas personagens. Se você usar base58 codificação, por exemplo, você obtém 58^23 combinações ~ 3,62E+40 ~ 362112779466767850000000000000000000000000000000000 combinações. Se você não o fizer - então ainda mais.
Opcionalmente os clientes com comprimento de zero bytes podem ser suportados pelo corretor. Neste caso, o corretor deve designar um cliente único para o cliente. Nem todos os corretores suportam isto ("MAIO" de acordo com a especificação).
O nome do usuário deve ser uma cadeia codificada UTF-8. A senha pode ser de dados binários.
A mensagem também pode ser dados binários.
Limites crescentes
Para aumentar o limite de cliente no VerneMQ, você pode definir uma opção, max_client_id_id_size:
https://docs.vernemq.com/configuration/nonstandard
o valor padrão é 23.
A identificação do cliente deve ser única
No MQTT normalmente os clientes devem ter clientes distintos, mesmo que tenham nomes de utilizador diferentes.
Se dois clientes compartilham a identificação do cliente, eles acabarão em um ping-pong de tentativas de conexão e desconexão, pois o corretor normalmente não permite conexões para dois clientes com o mesmo cliente.
(Acredito que a VerneMQ tem essa opção, mas também acredito que ela seja depreciada; de qualquer forma, é melhor não projetar com isso em mente, para permanecer compatível com outros corretores!)
Ref
- http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf
- ver secção 1.5.3 para limites de cadeias codificadas genéricas UTF-8, que se aplicam ao nome de utilizador