Comment activer WebSockets sur Mosquitto fonctionnant sous Windows?

8

J'ai un courtier Mosquitto opérationnel sur ma machine Windows. Je ne me souviens pas si je l'ai installé avec le support Web Sockets (parce que je ne savais pas ce que c'était, ou si j'en avais besoin). Mais vu que maintenant, je dois utiliser JavaScript (Paho) ​​pour me connecter à MQTT, je veux savoir comment activer la prise en charge Web Socket pour mon courtier MQTT existant.

J'ai essayé d'éditer le mosquitto.conffichier en ajoutant ces lignes au fichier

listener 9001
protocol websockets

mais ne semble pas fonctionner. Je joins une image qui pourrait fournir une meilleure image:

Messages d'erreur d'invite de commandes Windows et mosquitto.conf

Je ne suis pas très sûr des commandes non plus, mais elles semblent fonctionner avec le port par défaut 1883.

La question est donc: comment puis-je le faire fonctionner?

Salim Shamim
la source

Réponses:

10

Quelques choses:

  1. Les commandes mosquittto_pubet mosquitto_subne prennent pas du tout en charge les WebSockets.

  2. Lorsque vous exécutez mosquitto à partir de la ligne de commande, vous devez pointer explicitement vers le fichier de configuration avec l'option -c

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. Les versions Windows disponibles à partir des pages de téléchargement de mosquitto.org ne prennent pas en charge WebSockets, donc la seule façon de prendre en charge WebSocket est de créer vous-même Mosquitto à partir de la source et de l'activer (à partir de la version 1.5.1, les versions Windows contiennent désormais support websocket)

hardillb
la source
Cela signifie-t-il que javascript ne pourra pas communiquer avec un client pubsub? Et, Tout message envoyé au courtier (publication) par javascript sur un certain sujet ne sera pas reçu par mosquitto_sub en écoutant sur ce sujet?
Salim Shamim
Sans prise en charge WebSockets, le client javascript Paho ne pourra pas du tout se connecter au courtier, il ne pourra donc pas publier ni s'abonner à aucun sujet
hardillb
Ok, pour citer ce lien ( eclipse.org/paho/clients/js ) "Le client JavaScript Paho est une bibliothèque cliente basée sur un navigateur MQTT écrite en Javascript qui utilise WebSockets pour se connecter à un courtier MQTT." et ce blog.ithasu.org/2016/05/… qui explique comment activer WebSockets pour Mosquitto sur linux. Je ne peux pas comprendre pourquoi ce n'est pas possible. Je suis désolé peut-être que je suis juste perdu.
Salim Shamim
1
C'est déjà répondu, la build pour Windows n'a pas de WebSockets compilés. Vous devrez le construire vous-même si vous voulez le support de WebSocket
hardillb
C'est difficile à entendre. J'ai essayé de construire une version de Mosquitto en utilisant diverses références, mais je suis toujours coincé quelque part. Je n'ai pas non plus été en mesure de trouver quelqu'un avec un binaire moustique compatible Web (hébergé par Windows).
Eric Wu
5

Comme l'a dit @hardlib, vous devez compiler le moustique à partir des sources. Il nous a fallu quelques essais et erreurs pour le faire fonctionner sur Windows, alors voici un résumé au cas où cela aiderait quelqu'un. N'hésitez pas à le corriger:

  • Conditions préalables

    • installer Visual Studio
    • installer cmake (la dernière version est très bien)
    • installer OpenSSL dans C: \ temp \ OpenSSL
    • décompressez pthreads en C: \ pthreads
  • Créez des libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git et entrez dans le répertoire du projet
    • assurez-vous que vous êtes dans un commit stable, (2.3 est 6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb)
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • ouvrez le .sln dans Visual Studio et définissez le type de build à libérer et appuyez sur Ctrl + Maj + B
  • Construire un moustique

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • assurez-vous que l'option websockets est cochée, et cliquez sur générer
    • projet ouvert (voici la partie hacky)
    • ajoutez les répertoires libwebsockets \ lib et libwebsockets \ build en tant que répertoires d'inclusion supplémentaires à la version Release du projet mosquitto et ajoutez libwebsockets \ build \ lib \ Release aux répertoires de bibliothèque supplémentaires de l'éditeur de liens.
    • commenter #define snprintf sprintf_sde config.h
    • commenter la timespecstructure de pthreads.h
    • supprimer optimisé.lib et debug.lib des bibliothèques supplémentaires du projet mosquitto_passwd
    • ajouter #include <Windows.h>au if32 de win32 de mosquitto_passwd.c
    • Sélectionnez le mode de libération et appuyez sur Ctrl + Maj + B
bgusach
la source
3

À partir de la version 1.5.1, le paquet Windows prend en charge websocket, voir changelog https://mosquitto.org/blog/ Vous n'avez qu'à modifier le fichier mosquitto.conf, spécifiez d'utiliser le protocole websocket en ajoutant "protocol websockets" (voir la définition autour de la ligne 145) et éventuellement redémarrer le moustique si vous l'exécutez en tant que service

Decagrog
la source
Ajouter listener 9001et protocol websocketspour la prise en charge et l'utilisation de Websockt listener 1883et protocol mqttà votre autoriser le trafic mqtt par défaut mosquitto.config
Thomas
2

J'ai trouvé une version compilée de Mosquitto avec WebSockets construit pour Windows sur GitHub qui peut être utile si vous ne voulez pas construire le code vous-même.

Bien qu'il soit documenté en coréen, il comprend également une présentation PowerPoint avec des instructions sur la façon de le créer vous-même, si vous ne souhaitez pas utiliser les fichiers binaires précompilés.

cbit
la source