De acordo com este blog , o Mosquitto (o corretor MQTT) agora suporta a conexão com clientes através de soquetes da web. O artigo do blog parece sugerir que os soquetes da Web são mais úteis para aplicativos de navegador, já que os navegadores da Web ainda não suportam soquetes TCP adequados, embora o protocolo de soquete da Web seja suportado pela maioria dos navegadores modernos.
Se eu tiver apenas vários clientes em uma rede (por exemplo, sensores e atuadores baseados em microcontroladores, como Raspberry Pis), haverá alguma vantagem em usar soquetes da Web em conexões TCP diretas? A sobrecarga do protocolo de soquete da Web vale apenas quando você está se comunicando com um navegador?
mqtt
mosquitto
web-sockets
Aurora0001
fonte
fonte
Respostas:
A pergunta aqui parece ser "devo usar o MQTT sobre TCP ou usar o MQTT sobre websockets (que também passa por TCP)?" Em outras palavras, "encapsular o MQTT no protocolo websockets é uma boa idéia?"
Isso depende (quase) inteiramente do seu aplicativo e se você precisa de suporte para Websockets - provavelmente para consumir mensagens em um navegador ou por motivos de firewall. Se você não pode ter seu servidor acessível na porta 1883 ou melhor 8883 para MQTT puro, os websockets podem ser sua melhor opção.
Websockets requer largura de banda extra, mas se isso é importante para você é algo que você pode responder.
Também é importante notar que nas versões atuais do Mosquitto, os websockets não funcionam tão bem quanto poderiam, para que haja uma latência extra ao enviar / receber mensagens dos websockets. Isso é algo que não será um problema em versões futuras.
fonte
Quando você estiver se comunicando apenas dentro da sua rede ( intranet ), o TCP puro será adequado. Mas se você precisar se conectar a outro servidor, surgirão problemas.
Porque a maioria dos servidores modernos não permite que os clientes se conectem através de portas aleatórias. Eles permitem apenas a conexão de algumas portas dedicadas. Isso é tudo. Portanto, se você precisar se conectar a outro servidor, é melhor usar o websocket em vez da conexão TCP pura.
Se você está considerando a sobrecarga, não é muito maior. Você pode consultar este artigo , se quiser saber mais sobre a sobrecarga do websocket.
Na minha opinião pessoal, é melhor usar o websocket sempre, exceto se você tiver algumas preocupações sérias.
fonte
tl; dr - sempre prefira bibliotecas gratuitas a codificá-las (a menos que você tenha requisitos extremos)
Quanto tempo dura um pedaço de barbante? (YMMV)
Só posso falar de maneira geral, mas sempre prefiro bibliotecas wrapper a soquetes brutos (ou, de fato, a codificar qualquer coisa que eu possa obter gratuitamente de uma biblioteca).
Eles tornam a codificação mais simples e menos propensa a erros. Eles cuidam de muitas tarefas domésticas e de tratamento de erros, que é o código que você precisaria escrever e depurar, onde a biblioteca geralmente foi bem revisada e testada e está sendo usada por milhares de outras pessoas, todas elas irá relatar / corrigir bugs para você.
Além disso, é menos código para você manter (e, possivelmente, port), o que significa mais tempo para desenvolver, testar e aperfeiçoar seu aplicativo ou seguir para o próximo.
A única sobrecarga é sem dúvida uma chamada de função, se você aceitar que toda essa bondade do bibliotecário (manipulação de erros, manutenção de mangueiras e similares) é algo que você precisaria codificar para se tornar um software bom e estável.
Se você está preocupado com o desempenho, basta criar um perfil. Mas, a menos que seu soquete esteja ativo centenas de vezes por segundo, eu nem me incomodaria.
fonte