Selon ce blog , Mosquitto (le courtier MQTT) prend désormais en charge la connexion aux clients via des sockets Web. L'article de blog semble laisser entendre que les sockets Web sont plus utiles pour les applications de navigateur, car les navigateurs Web ne prennent pas encore en charge les sockets TCP appropriés, bien que le protocole de socket Web soit pris en charge par la majorité des navigateurs modernes.
Si je n'ai que divers clients dans un réseau (par exemple, des capteurs et des actionneurs basés sur des microcontrôleurs tels que Raspberry Pis), y aura-t-il un avantage à utiliser des sockets Web sur des connexions TCP directes? La surcharge du protocole de socket Web en vaut-elle la peine uniquement lorsque vous communiquez avec un navigateur?
la source
Réponses:
La question ici semble être "dois-je utiliser MQTT sur TCP, ou utiliser MQTT sur des websockets (qui va également sur TCP)?" En d'autres termes, "l'encapsulation de MQTT dans le protocole websockets est-elle une bonne idée?"
Cela dépend (presque) entièrement de votre application et de la question de savoir si vous avez besoin de la prise en charge Websockets - probablement pour consommer des messages dans un navigateur ou pour des raisons de pare-feu. Si vous ne pouvez pas avoir votre serveur accessible sur le port 1883 ou mieux 8883 pour MQTT pur, alors les websockets peuvent être votre meilleure option.
Les Websockets nécessitent une bande passante supplémentaire, mais vous ne pouvez répondre que si cela est important pour vous.
Il convient également de noter que dans les versions actuelles de Mosquitto, les Websockets ne fonctionnent pas aussi bien qu'ils le pourraient, de sorte qu'il peut y avoir une latence supplémentaire lors de l'envoi / la réception de messages Websockets. Ce n'est toutefois pas un problème dans les futures versions.
la source
Lorsque vous communiquez uniquement à l'intérieur de votre réseau ( intranet ), l'utilisation de TCP pur sera très bien. Mais si vous devez vous connecter à un autre serveur, des problèmes surviendront.
Parce que la plupart des serveurs modernes ne permettent pas aux clients de se connecter via des ports aléatoires. Ils permettent uniquement à certains ports dédiés de se connecter. C'est tout. Par conséquent, si vous devez vous connecter à un autre serveur, mieux vaut utiliser websocket plutôt qu'une connexion TCP pure.
Si vous considérez les frais généraux, ce n'est pas beaucoup plus gros. Vous pouvez vous référer à cet article , si vous voulez en savoir plus sur la surcharge du websocket.
À mon avis, il est préférable d'utiliser toujours websocket, sauf que vous avez de sérieuses préoccupations.
la source
tl; dr - préférez toujours les bibliothèques gratuites au codage vous-même (sauf si vous avez des exigences extrêmes)
Quelle est la longueur d'une ficelle? (YMMV)
Je ne peux parler que de manière générale, mais je préfère toujours les bibliothèques de wrapper aux sockets brutes (ou, en fait, au codage de tout ce que je peux obtenir gratuitement à partir d'une bibliothèque).
Ils rendent le codage plus simple et moins sujet aux erreurs. Ils s'occupent de beaucoup de gestion et de gestion des erreurs, ce qui est du code que vous auriez à écrire et à déboguer vous-même, alors que la bibliothèque a généralement été bien examinée et testée et est utilisée par des milliers d'autres, tous vous signalera / corrigera des bogues.
De plus, il vous faut moins de code à maintenir (et, éventuellement, à porter), ce qui signifie plus de temps pour développer, tester et peaufiner votre application, ou passer à la suivante.
Le seul surcoût est sans doute un appel de fonction, si vous acceptez que toute cette qualité de bibliothécaire (gestion des erreurs, gestion des flexibles, etc.) est quelque chose que vous devrez vous coder pour obtenir un logiciel bon et stable.
Si vous êtes préoccupé par les performances, il suffit de profiler. Mais, à moins que votre socket ne soit actif des centaines de fois par seconde, je ne m'embêterais même pas.
la source