¿Cómo habilitar WebSockets en Mosquitto ejecutándose en Windows?

8

Tengo un corredor Mosquitto en funcionamiento en mi máquina Windows. No recuerdo si lo instalé con soporte de Web Sockets (porque no sabía qué era eso o si lo necesitaba). Pero ahora que mi requisito es utilizar JavaScript (Paho) ​​para conectarse a MQTT, quiero saber cómo habilitar el soporte de Web Socket para mi agente MQTT existente.

Intenté editar el mosquitto.confarchivo agregando estas líneas al archivo

listener 9001
protocol websockets

pero no parece funcionar Adjunto una imagen que podría proporcionar una mejor imagen:

Mensajes de error del símbolo del sistema de Windows y mosquitto.conf

Tampoco estoy muy seguro de los comandos, pero parecen funcionar con el puerto predeterminado 1883.

Entonces la pregunta es: ¿Cómo hago que funcione?

Salim Shamim
fuente

Respuestas:

10

Unas pocas cosas:

  1. Los comandos mosquittto_puby mosquitto_subno son compatibles con WebSockets.

  2. Cuando ejecuta mosquitto desde la línea de comandos, debe señalar explícitamente el archivo de configuración con la opción -c

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. Las compilaciones de Windows disponibles en las páginas de descarga de mosquitto.org no son compatibles con WebSockets, por lo que la única forma en que tendrá soporte de WebSocket es si compiló mosquitto desde el origen y lo habilitó (a partir de la versión 1.5.1, las compilaciones de Windows ahora contienen soporte websocket)

hardillb
fuente
¿Significaría eso que JavaScript no podrá comunicarse con ningún cliente pubsub? Y, ¿algún mensaje enviado al corredor (publicar) por javascript sobre un tema determinado no será recibido por mosquitto_sub escuchando sobre ese tema?
Salim Shamim
Sin el soporte de WebSockets, el cliente Paho javascript no podrá conectarse con el agente en absoluto, por lo que no podrá publicar ni suscribirse a ningún tema
hardillb
Ok, para citar este enlace ( eclipse.org/paho/clients/js ) "Paho JavaScript Client es una biblioteca de cliente basada en navegador MQTT escrita en Javascript que usa WebSockets para conectarse a un agente MQTT". y este blog.ithasu.org/2016/05/… que explica cómo habilitar WebSockets para Mosquitto en Linux. No puedo entender por qué no es posible. Lo siento, puede que solo esté perdido.
Salim Shamim
1
Ya está respondido, la compilación para Windows no tiene compilados WebSocket. Tendrá que compilarlo usted mismo si desea soporte para WebSocket
hardillb
Eso es difícil de escuchar. He estado tratando de construir una versión de Mosquitto usando varias referencias, pero siempre me estoy quedando atrapado en algún lugar. Tampoco he podido encontrar a nadie con un binario mosquitto (alojado en Windows) habilitado para websocket.
Eric Wu
5

Como dijo @hardlib, debes compilar mosquitto de las fuentes. Nos llevó un poco de prueba y error hacer que funcionara en Windows, así que aquí hay un resumen en caso de que ayude a alguien. Por favor no dude en corregirlo:

  • Prerrequisitos

    • instalar Visual Studio
    • instalar cmake (la última versión está bien)
    • instale OpenSSL en C: \ temp \ OpenSSL
    • descomprima pthreads en C: \ pthreads
  • Construir libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git y entrar en el directorio del proyecto
    • asegúrese de estar en una confirmación estable, (2.3 es 6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb)
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • abra el .sln en Visual Studio y configure el tipo de compilación para liberar y presione Ctrl + Shift + B
  • Construye mosquitto

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • asegúrese de que la opción websockets esté marcada y haga clic en generar
    • proyecto abierto (aquí viene la parte hacky)
    • agregue los directorios libwebsockets \ lib y libwebsockets \ build como directorios de inclusión adicionales a la compilación Release del proyecto mosquitto y agregue libwebsockets \ build \ lib \ Release a los directorios de biblioteca adicionales del enlazador.
    • comentar #define snprintf sprintf_sdesde config.h
    • comentar la timespecestructura de pthreads.h
    • elimine optimized.lib y debug.lib de las bibliotecas adicionales del proyecto mosquitto_passwd
    • agregar #include <Windows.h>al win32 ifdef de mosquitto_passwd.c
    • Seleccione el modo de liberación y presione Ctrl + Shift + B
bgusach
fuente
3

A partir de 1.5.1, el paquete de Windows admite websocket, consulte el registro de cambios https://mosquitto.org/blog/ Solo tiene que editar el archivo mosquitto.conf, especifique para usar el protocolo websocket agregando "protocolo websockets" (consulte la definición alrededor de la línea 145) y eventualmente reinicie mosquitto si lo ejecuta como un servicio

Decagrog
fuente
Añadir listener 9001y protocol websocketspara el apoyo Websockt y el uso listener 1883y protocol mqtta su mosquitto.config permitir el tráfico por defecto MQTT
Thomas
2

Encontré una versión compilada de Mosquitto con WebSockets creado para Windows en GitHub que puede ser útil si no desea construir el código usted mismo.

Si bien está documentado en coreano, también incluye una presentación de PowerPoint con instrucciones sobre cómo construirlo usted mismo, si no desea utilizar los binarios precompilados.

cbit
fuente