Como habilitar o WebSockets no Mosquitto em execução no Windows?

8

Eu tenho um corretor Mosquitto instalado e funcionando na minha máquina Windows. Não me lembro se o instalei com suporte para Web Sockets (porque eu não sabia o que era isso ou se precisava). Mas, agora que meu requisito é usar JavaScript (Paho) ​​para conectar-se ao MQTT, quero saber como ativar o suporte ao Web Socket para meu broker MQTT existente.

Tentei editar o mosquitto.confarquivo adicionando essas linhas ao arquivo

listener 9001
protocol websockets

mas não parece funcionar. Estou anexando uma imagem que pode fornecer uma imagem melhor:

Mensagens de erro do prompt de comando do Windows e mosquitto.conf

Também não tenho muita certeza dos comandos, mas eles parecem funcionar com a porta 1883 padrão.

Portanto, a pergunta é: como faço para funcionar?

Salim Shamim
fonte

Respostas:

10

Algumas coisas:

  1. Os comandos mosquittto_pube mosquitto_subnão suportam WebSockets.

  2. Ao executar o mosquitto na linha de comando, você precisa apontar explicitamente para o arquivo de configuração com a opção -c

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. As compilações do Windows disponíveis nas páginas de download do mosquitto.org não suportam o WebSockets, portanto, a única maneira de obter o suporte do WebSocket é se você construiu o mosquitto a partir da fonte e o habilitou. (A partir da versão 1.5.1, as compilações do Windows agora contêm suporte para websocket)

hardillb
fonte
Isso significaria que o javascript não poderá se comunicar com nenhum cliente pubsub? E, alguma mensagem enviada ao broker (publicação) por javascript em um determinado tópico não será recebida pelo mosquitto_sub ouvindo sobre esse tópico?
Salim Shamim
Sem WebSockets apoiar o cliente javascript OPAS não será capaz de conectar-se ao corretor em tudo para que ele não será capaz de publicar ou subscrever quaisquer tópicos
hardillb
Ok, para citar este link ( eclipse.org/paho/clients/js ) "O Paho JavaScript Client é uma biblioteca de clientes baseada no navegador MQTT, escrita em Javascript, que usa WebSockets para conectar-se a um MQTT Broker." e este blog.ithasu.org/2016/05/…, que explica como habilitar o WebSockets para Mosquitto no linux. Não consigo entender por que não é possível. Me desculpe, talvez esteja apenas perdida.
Salim Shamim
1
Isso já está atendida, a compilação para o Windows não ter WebSockets compilados em Você vai ter que construir a si mesmo se você quiser WebSocket apoio.
hardillb
Isso é difícil de ouvir. Eu tenho tentado construir uma versão do Mosquitto usando várias referências, mas estou sempre ficando preso em algum lugar. Também não consegui encontrar ninguém com um binário de mosquito habilitado para websocket (hospedado no Windows).
Eric Wu
5

Como @hardlib disse, você precisa compilar mosquitos a partir de fontes. Demorou algumas tentativas e erros para fazê-lo funcionar no Windows, então aqui está um resumo no caso de ajudar alguém. Por favor, não hesite em corrigi-lo:

  • Pré-requisitos

    • instalar o Visual Studio
    • instale o cmake (a versão mais recente está correta)
    • instale o OpenSSL em C: \ temp \ OpenSSL
    • descompacte pthreads em C: \ pthreads
  • Crie libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git e entrar no diretório do projeto
    • verifique se você está em um commit estável (2.3 é 6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb)
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • abra o .sln no Visual Studio e defina o tipo de compilação para liberar e pressione Ctrl + Shift + B
  • Construir mosquito

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • verifique se a opção websockets está marcada e clique em gerar
    • projeto aberto (aqui vem a parte hacky)
    • adicione os diretórios libwebsockets \ lib e libwebsockets \ build como diretórios de inclusão adicionais à versão Release do projeto mosquitto e adicione libwebsockets \ build \ lib \ Release aos diretórios adicionais da biblioteca do vinculador.
    • comentar fora #define snprintf sprintf_sde config.h
    • comente a timespecestrutura de pthreads.h
    • remova optimized.lib e debug.lib das bibliotecas adicionais do projeto mosquitto_passwd
    • adicione #include <Windows.h>ao if32 de win32 do mosquitto_passwd.c
    • Selecione o modo de liberação e pressione Ctrl + Shift + B
bgusach
fonte
3

A partir da 1.5.1, o pacote do Windows suporta websocket, consulte changelog https://mosquitto.org/blog/ Você precisa apenas editar o arquivo mosquitto.conf, especifique o uso do protocolo websocket adicionando "protocol websockets" (consulte a definição em torno da linha 145) e, eventualmente, reinicie o mosquitto se você o executar como um serviço

Decagrog
fonte
Adicione listener 9001e protocol websocketsutilize o suporte e uso da Websockt listener 1883e, protocol mqttao seu tráfego padrão permitido do mosquiteiro.config, mqtt
Thomas
2

Encontrei uma versão compilada do Mosquitto com WebSockets criados para Windows no GitHub que pode ser útil se você não quiser criar o código por conta própria.

Embora esteja documentado em coreano, também inclui uma apresentação do PowerPoint com instruções sobre como construí-lo, se você não desejar usar os binários pré-compilados.

cbit
fonte