Làm cách nào để bật WebSockets trên Mosquitto chạy trên Windows?


8

Tôi có một nhà môi giới Mosquitto và chạy trên máy Windows của tôi. Tôi không nhớ nếu tôi đã cài đặt nó với hỗ trợ Web Sockets (Vì tôi không biết đó là gì hoặc nếu tôi cần nó). Nhưng bây giờ yêu cầu của tôi là sử dụng JavaScript (Paho) ​​để kết nối với MQTT, tôi muốn biết cách bật hỗ trợ Ổ cắm Web cho nhà môi giới MQTT hiện tại của mình.

Tôi đã thử chỉnh sửa mosquitto.conftệp bằng cách thêm các dòng này vào tệp

listener 9001
protocol websockets

nhưng dường như không hoạt động. Tôi đang đính kèm một hình ảnh có thể cung cấp một hình ảnh tốt hơn:

Windows Command Prompt Thông báo lỗi và mosquitto.conf

Tôi cũng không chắc lắm về các lệnh nhưng chúng dường như hoạt động với cổng mặc định 1883.

Vì vậy, câu hỏi là: Làm thế nào để tôi làm cho nó hoạt động?

Câu trả lời:


10

Một vài thứ:

  1. Các lệnh mosquittto_pubmosquitto_subkhông hỗ trợ WebSockets cả.

  2. Khi bạn chạy mosquitto từ dòng lệnh, bạn phải trỏ rõ ràng đến tệp cấu hình với tùy chọn -c

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. Các bản dựng Windows có sẵn từ các trang tải xuống mosquitto.org không hỗ trợ WebSockets, vì vậy cách duy nhất bạn sẽ có hỗ trợ WebSocket là nếu bạn tự xây dựng mosquitto từ nguồn và kích hoạt nó (kể từ phiên bản 1.5.1, các bản dựng Windows hiện có hỗ trợ websocket)


Điều đó có nghĩa là javascript sẽ không thể giao tiếp với bất kỳ ứng dụng khách pubsub nào? Và, bất kỳ thông điệp nào được gửi tới nhà môi giới (xuất bản) bởi javascript về một chủ đề nhất định sẽ không được mosquitto_sub lắng nghe về chủ đề đó?
Salim Shamim

Không có hỗ trợ WebSockets, ứng dụng javascript của Paho sẽ không thể kết nối với nhà môi giới, do đó, nó sẽ không thể xuất bản hoặc đăng ký bất kỳ chủ đề nào
hardillb

Ok, để trích dẫn liên kết này ( eclipse.org/paho/clents/js ) "Paho JavaScript Client là một thư viện máy khách dựa trên trình duyệt MQTT được viết bằng Javascript sử dụng WebSockets để kết nối với Nhà môi giới MQTT." và blog này.ithasu.org/2016/05/ , trong đó giải thích cách bật WebSockets cho Mosquitto trên linux. Tôi không thể hiểu tại sao điều đó là không thể. Tôi xin lỗi có thể tôi chỉ bị mất.
Salim Shamim

1
Điều đó đã được trả lời, bản dựng cho Windows không có WebSockets được biên dịch. Bạn sẽ phải tự xây dựng nó nếu bạn muốn hỗ trợ WebSocket
hardillb

Điều đó thật khó nghe. Tôi đã cố gắng xây dựng một phiên bản Mosquitto usnmg các tài liệu tham khảo khác nhau, nhưng tôi luôn bị mắc kẹt ở đâu đó. Tôi cũng không thể tìm thấy bất cứ ai có nhị phân mosquitto (lưu trữ windows) được kích hoạt websocket.
Eric Wu

5

Như @hardlib đã nói, bạn phải biên dịch mosquitto từ các nguồn. Chúng tôi đã mất một số thử nghiệm và lỗi để chúng tôi làm cho nó hoạt động trên windows, vì vậy đây là một số tóm tắt trong trường hợp nó giúp được ai đó. Xin đừng ngần ngại sửa nó:

  • Điều kiện tiên quyết

    • cài đặt Visual Studio
    • cài đặt cmake (phiên bản mới nhất vẫn ổn)
    • cài đặt OpenSSL lên C: \ temp \ OpenSSL
    • giải nén pthreads sang C: \ pthreads
  • Xây dựng libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git và nhận được vào thư mục của dự án
    • đảm bảo bạn đang ở trong một cam kết ổn định, (2.3 là 6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb)
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • mở .sln trong Visual Studio và đặt loại bản dựng để phát hành và nhấn Ctrl + Shift + B
  • Xây dựng mosquitto

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • đảm bảo tùy chọn websockets được chọn và nhấp vào tạo
    • mở dự án (ở đây có phần hacky)
    • thêm các thư mục libwebsockets \ lib và libwebsockets \ build như các thư mục bao gồm bổ sung vào bản dựng Phát hành của dự án mosquitto và thêm libwebsockets \ build \ lib \ Phát hành vào các thư mục thư viện bổ sung của trình liên kết.
    • bình luận #define snprintf sprintf_stừ config.h
    • nhận xét timespeccấu trúc từ pthreads.h
    • xóa tối ưu hóa.lib và debug.lib khỏi các thư viện bổ sung của dự án mosquitto_passwd
    • thêm #include <Windows.h>vào win32 ifdef của mosquitto_passwd.c
    • Chọn chế độ phát hành và nhấn Ctrl + Shift + B

3

Bắt đầu từ 1.5.1 gói websocket hỗ trợ websocket, hãy xem changelog https://mosquitto.org/blog/ Bạn chỉ cần chỉnh sửa tệp mosquitto.conf, chỉ định sử dụng giao thức websocket bằng cách thêm "websockets giao thức" (xem định nghĩa xung quanh dòng 145) và cuối cùng khởi động lại mosquitto nếu bạn chạy nó như một dịch vụ


Thêm listener 9001protocol websocketshỗ trợ Websockt và sử dụng listener 1883protocol mqttcho phép mosquitto.config giao thông mqtt mặc định của bạn
Thomas

2

Tôi đã tìm thấy một phiên bản Mosquitto được biên dịch với WebSockets được xây dựng cho Windows trên GitHub có thể được sử dụng nếu bạn không muốn tự mình xây dựng mã.

Mặc dù được ghi lại bằng tiếng Hàn, nó cũng bao gồm một bản trình bày PowerPoint với các hướng dẫn về cách tự xây dựng nó, nếu bạn không muốn sử dụng các nhị phân được biên dịch trước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.