Bagaimana cara mengaktifkan WebSockets pada Mosquitto yang berjalan di Windows?

8

Saya memiliki broker Mosquitto dan berjalan di mesin Windows saya. Saya tidak ingat apakah saya menginstalnya dengan dukungan Soket Web (Karena saya tidak tahu apa itu, atau jika saya membutuhkannya). Tetapi melihat sekarang persyaratan saya adalah menggunakan JavaScript (Paho) ​​untuk terhubung ke MQTT, saya ingin tahu cara mengaktifkan dukungan Web Socket untuk broker MQTT saya yang ada.

Saya mencoba mengedit mosquitto.conffile dengan menambahkan baris-baris ini ke file

listener 9001
protocol websockets

tapi sepertinya tidak berhasil. Saya melampirkan gambar yang mungkin memberikan gambar yang lebih baik:

Pesan Kesalahan Prompt Perintah Windows dan mosquitto.conf

Saya juga tidak terlalu yakin dengan perintah tetapi tampaknya berfungsi dengan port default 1883.

Jadi pertanyaannya adalah: Bagaimana cara membuatnya bekerja?

Salim Shamim
sumber

Jawaban:

10

Beberapa hal:

  1. The mosquittto_pubdan mosquitto_subperintah tidak mendukung WebSockets sama sekali.

  2. Ketika Anda menjalankan mosquitto dari baris perintah, Anda harus secara eksplisit menunjuk ke file konfigurasi dengan opsi -c

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. Windows build tersedia dari halaman unduhan mosquitto.org tidak mendukung WebSockets, jadi satu-satunya cara Anda akan mendapatkan dukungan WebSocket adalah jika Anda membuat sendiri mosquitto dari sumbernya dan mengaktifkannya (pada versi 1.5.1 Windows builds sekarang mengandung dukungan websocket)

hardillb
sumber
Apakah itu berarti bahwa javascript tidak akan dapat berkomunikasi dengan klien pubsub? Dan, ada pesan yang dikirim ke broker (terbitkan) dengan javascript pada topik tertentu tidak akan diterima oleh mosquitto_sub mendengarkan topik itu?
Salim Shamim
Tanpa dukungan WebSockets, klien javascript Paho tidak akan dapat terhubung ke broker sama sekali sehingga tidak akan dapat mempublikasikan atau berlangganan ke topik apa pun
hardillb
Oke, mengutip tautan ini ( eclipse.org/paho/clients/js ) "Klien JavaScript Paho adalah perpustakaan klien berbasis browser MQTT yang ditulis dalam Javascript yang menggunakan WebSockets untuk terhubung ke MQTT Broker." dan blog ini.ithasu.org/2016/05/... yang menjelaskan cara mengaktifkan WebSockets untuk Mosquitto di linux. Saya tidak bisa mengerti mengapa itu tidak mungkin. Saya minta maaf mungkin saya hanya tersesat.
Salim Shamim
1
Itu sudah dijawab, build untuk Windows tidak memiliki WebSockets dikompilasi. Anda harus membangunnya sendiri jika Anda menginginkan dukungan WebSocket
hardillb
Itu sulit didengar. Saya sudah mencoba membangun versi Mosquitto menggunakan berbagai referensi, tetapi saya selalu terjebak di suatu tempat. Saya tidak dapat menemukan orang dengan biner mosquitto (windows-host) yang mendukung websocket.
Eric Wu
5

Seperti yang dikatakan @hardlib, Anda harus mengkompilasi mosquitto dari sumber. Butuh beberapa percobaan dan kesalahan bagi kami untuk membuatnya bekerja di windows, jadi di sini beberapa ringkasan kalau-kalau itu membantu seseorang. Harap jangan ragu untuk memperbaikinya:

  • Prasyarat

    • instal Visual Studio
    • instal cmake (versi terbaru tidak masalah)
    • instal OpenSSL ke C: \ temp \ OpenSSL
    • unzip pthreads ke C: \ pthreads
  • Buat libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git dan masuk ke dir proyek
    • pastikan Anda berada dalam komit stabil, (2.3 adalah 6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb)
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • buka .sln di Visual Studio dan atur tipe build untuk melepaskan dan tekan Ctrl + Shift + B
  • Bangun mosquitto

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • pastikan opsi websockets dicentang, dan klik menghasilkan
    • buka proyek (inilah bagian hacky)
    • tambahkan direktori libwebsockets \ lib dan libwebsockets \ build sebagai tambahan termasuk direktori untuk rilis Release dari proyek mosquitto dan tambahkan libwebsockets \ build \ lib \ Release ke direktori perpustakaan tambahan dari linker.
    • komentar #define snprintf sprintf_sdari config.h
    • komentar timespecstruct dari pthreads.h
    • hapus dioptimalkan.lib dan debug.lib dari pustaka tambahan proyek mosquitto_passwd
    • tambahkan #include <Windows.h>ke win32 ifdef dari mosquitto_passwd.c
    • Pilih mode rilis dan tekan Ctrl + Shift + B
bgusach
sumber
3

Mulai dari 1.5.1 paket windows mendukung websocket, lihat changelog https://mosquitto.org/blog/ Anda baru saja mengedit file mosquitto.conf, tentukan untuk menggunakan protokol websocket dengan menambahkan "protokol websockets" (lihat definisi di sekitar baris 145) dan akhirnya restart mosquitto jika Anda menjalankannya sebagai layanan

Decagrog
sumber
Tambahkan listener 9001dan protocol websocketsuntuk Websockt mendukung dan menggunakan listener 1883dan protocol mqttuntuk memungkinkan Anda lalu lintas mqtt default mosquitto.config
Thomas
2

Saya menemukan versi kompilasi dari Mosquitto dengan WebSockets yang dibangun untuk Windows di GitHub yang mungkin berguna jika Anda tidak ingin membuat kode sendiri.

Meskipun didokumentasikan dalam bahasa Korea, itu juga mencakup presentasi PowerPoint dengan instruksi tentang cara membuatnya sendiri, jika Anda tidak ingin menggunakan binari yang telah dikompilasi sebelumnya.

cbit
sumber