Máy chủ mqtt nodejs

MQTT là gì?

MQTT [Message Queuing Telemetry Transport] là một giao thức Publish/Subscribe tin nhắn rất đơn giản, nhẹ nhàng sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động trong điều kiện đường truyền không ổn định



Có nhiều cách để khởi tạo một Máy chủ MQTT như
1. Sử dụng các hệ thống đám mây có sẵn
https. //www. đám mâymqtt. com
https. //www. hivemq. com
2. Sử dụng các công cụ có sẵn giao diện hỗ trợ hoặc dòng lệnh [Mosquitto]
3. Sử dụng các thư viện hỗ trợ trong từng loại ngôn ngữ bạn sử dụng
C#. MQTTnet
JavaScript. Mosca

Ở đây tôi sử dụng cách thứ 3 và sử dụng thư viện Mosca trên NodeJS

Cài đặt Máy chủ MQTT sử dụng Mosca

Yêu cầu
Máy tính có cài đặt NodeJS
Docker Desktop [Trong trường hợp muốn triển khai vùng chứa]

.

Các bước thực hiện

Khởi tạo dự án NodeJS
npm init

Cài đặt các . //github. com/mcollina/mosca
Mosca là thư viện để tạo MQTT server
//github.com/mcollina/mosca
https. //www. npmjs. com/package/mosca

mqtt là thư viện để tạo các tương tác từ máy khách lên máy chủ MQTT
https. //www. npmjs. com/package/mqtt

npm install mosca
npm install mqtt

Trong trường hợp có lỗi liên quan đến Visual Studio Compiler có . js to config MQTT server
npm install --global --production windows-build-tools
npm config set msvs_version 2017

Tạo file mqtt-server.js để cấu hình MQTT server
Create file subscriber. js để tiến hành công việc tương tác mà khách hàng đóng vai trò là người đăng ký nhận tin nhắn từ máy chủ MQTT
Tạo nhà xuất bản tệp. js. js để tiến hành công việc tương tác mà khách hàng đóng vai trò chơi là nhà xuất bản gửi thông báo tới máy chủ MQTT
Mở 3 thiết bị đầu cuối tương ứng với 3 phần [máy chủ, người đăng ký, nhà xuất bản] từ vị trí hiện tại của dự án . js

Tiến hành chạy lần lượt các phần
node mqtt-server.js
nút người đăng ký. js
nhà xuất bản nút. js

Nếu bạn tải mẫu mã của tôi thì sẽ chạy bằng dòng lệnh sau
npm run server
npm run subscribernpm runnpm runnpm run
npm run subscriber

Kiểm tra kết quả nhận được



Create connection from client is a application. MẠNG LƯỚI


Các bạn có thể tải về mẫu mã tham khảo tại đây.

Yêu cầu
Visual Studio hoặc Visual Studio Code
. NET Core SDK

Các bước thực hiện
Tạo dự án mới ở dạng Ứng dụng bảng điều khiển
dotnet new -o MQTTClientTest

Cài đặt các thư viện cần thiết
Để kết nối tới MQTT server ở đây tôi sử dụng thư viện MQTTnet
//github.com/chkr1011/MQTTnet

cd MQTTClientTest
dotnet add package MQTTnet

Tham khảo dữ liệu gửi nhận dữ liệu trong tệp Program. cs dưới đây
Chuyển và kiểm tra kết quả
Tiến hành chạy máy chủ MQTT được tạo ở bên trên
node mqtt-server. js hoặc npm start

chạy dotnet

Kết quả



Ở đây là một ví dụ hết sức đơn giản để xây dựng một nhà môi giới máy chủ MQTT với phần máy chủ sử dụng NodeJS và máy khách sử dụng. MẠNG LƯỚI.
Với các kiến ​​thức chuyên sâu cụ thể, các bạn vui lòng tham khảo tại các bài viết khác hoặc tìm kiếm thêm thông tin trên internet.

Tham khảo thêm
https. //vừa phải. com/@alifabdullah/setting-up-private-mqtt-broker-using-mosca-in-node-js-c61a3c74f952
https. //github. com/chkr1011/MQTTnet

Để có thể tương tác một cách dễ dàng với Máy chủ MQTT, bạn có thể sử dụng các công cụ để kiểm tra kết nối tới MQTT bằng giao diện
MQTT.fx
http. //www. jensd. de/apps/mqttfx/
Muỗi
http. // muỗi. org/download/



Tiếp tục cập nhật.

Như chúng ta có thể đã biết, Node. js là một công cụ và thời gian chạy JavaScript không đồng bộ và hướng sự kiện, cung cấp năng lượng cho rất nhiều ứng dụng nối mạng, phía máy chủ tồn tại ngày nay. Trong bài đăng này, chúng ta sẽ khám phá sự tương tác của Node. js với MQTT, giao thức xuất bản/đăng ký [pub/sub] và tiêu chuẩn cho thế giới Internet vạn vật [IoT]

Trong bài đăng này, chúng tôi dự định chỉ đề cập đến các chức năng và API MQTT công khai, quan trọng, đồng thời khám phá một tập lệnh đơn giản của nhà xuất bản và người đăng ký trong Node. js

MQTT là gì?

Năm 1999, Andy Standford-Clark của IBM và Arlen Nipper đã thiết kế phiên bản đầu tiên của giao thức MQTT. Vào thời điểm đó, mục tiêu là xây dựng một giao thức có thể hỗ trợ băng thông thấp, nhẹ và tiêu thụ tài nguyên tối thiểu vì các thiết bị được kết nối qua liên kết vệ tinh rất đắt.

Có hai phiên bản của đặc điểm kỹ thuật. MQTT 3. 1. 1 và MQTT 5. 0. 0. Hầu hết các nhà môi giới MQTT thương mại hiện hỗ trợ MQTT 5, nhưng nhiều dịch vụ đám mây do IoT quản lý chỉ hỗ trợ MQTT 3. 1. 1, từng là phiên bản phổ biến và được hỗ trợ rộng rãi nhất

Rất khuyến khích triển khai IoT mới sử dụng phiên bản 5. 0. 0 [được phê duyệt vào năm 2018] vì các tính năng mới của nó tập trung nhiều hơn vào các hệ thống mạnh mẽ và khả năng mở rộng trên nền tảng đám mây. Bạn có thể đọc thêm những điểm nổi bật và sự khác biệt chi tiết giữa cả hai phiên bản trên trang GitHub của MQTT

sử dụng ngày hôm nay

MQTT là một giao thức máy khách-máy chủ nhẹ, triển khai mô hình truyền tải thông điệp pub/sub và đã được sử dụng để kết nối các thiết bị/đồng nghiệp từ xa trong các ứng dụng IoT quan trọng, giao tiếp giữa Máy với Máy [M2M] và nhiều lĩnh vực khác yêu cầu giao tiếp thông suốt. . Đây là kết quả của thiết kế đơn giản, dễ sử dụng và đặc tả mở

MQTT đã được quản lý bởi ban chỉ đạo kỹ thuật OASIS từ năm 2014. Ủy ban giám sát việc duy trì, cập nhật và duy trì tiêu chuẩn, bao gồm tổ chức các tài liệu trường hợp sử dụng và bảo vệ quyền sở hữu trí tuệ của nó

Nó dựa trên TCP/IP, một ngăn xếp mạng cấp thấp đáng tin cậy và định hướng kết nối với lớp vận chuyển độc lập với cấu trúc tải trọng dữ liệu, cho phép mô hình giao tiếp mạng máy chủ đến máy chủ hai chiều được sắp xếp và chính xác

Mẫu pub/sub cũng cho phép các thông báo được phân phối từ một ứng dụng đến nhiều ứng dụng khác nhau cùng một lúc. Tuy nhiên, nhà xuất bản và người đăng ký trong trường hợp này thường là các ứng dụng độc lập [tách rời] và chỉ được kết nối thông qua nhà môi giới hoặc máy chủ. Ví dụ: nền tảng nhắn tin pub/sub phổ biến RabbitMQ, sử dụng MQTT bên trong

Các trường hợp sử dụng MQTT

MQTT đã tìm thấy rất nhiều trường hợp sử dụng mà chúng ta sẽ khám phá bên dưới

  1. Kích hoạt phát tin nhắn. Một khách hàng có thể xuất bản tin nhắn hoặc tải trọng cho nhiều ứng dụng khách khác, tất nhiên, những ứng dụng này cần đăng ký trước các tin nhắn này qua các chủ đề trên một nhà môi giới
  2. Cung cấp các tiêu đề/tài nguyên thư nhẹ và tối thiểu. Điều này cho phép sử dụng băng thông tối thiểu trong truyền tải tin nhắn, vì vậy MQTT có thể mở rộng hiệu quả để phục vụ hàng triệu thiết bị IoT
  3. Vận chuyển hoặc phân phối tin nhắn đáng tin cậy ở cốt lõi của nó. Hầu hết các thiết bị IoT đều dựa vào điều này, nhưng ở cấp độ cao, MQTT xác định các lớp dịch vụ đảm bảo việc vận chuyển tin nhắn được xử lý
  4. Xây dựng các ứng dụng vận chuyển tin nhắn có độ bảo mật cao. MQTT tỏa sáng ở đây, vì tải trọng tin nhắn có thể được mã hóa và bảo mật bằng TLS và các cơ chế xác thực hiện đại khác như OAUTH
  5. Đảm bảo các ứng dụng khách có kết nối liên tục. Điều này rất hữu ích cho việc lưu trữ tin nhắn tạm thời ở những khu vực mà kết nối mạng có thể không đáng tin cậy
    1. Có liên quan, MQTT giúp giảm thời gian để các thiết bị trên mạng di động kém kết nối lại
  6. Tìm ứng dụng trong các ngành và lĩnh vực khác nhau bao gồm ô tô, dầu khí, sản xuất, hậu cần, vận tải và thiết bị nhà thông minh

Bạn có thể tìm thêm chi tiết về những điều này trên trang trường hợp sử dụng của tài liệu MQTT. Một trong những dự án tự động hóa gia đình nguồn mở phổ biến nhất, trợ lý gia đình, dựa trên giao thức MQTT

Kiến trúc quán rượu/phụ của MQTT

Giao thức MQTT bao gồm nhà môi giới, hoạt động giống như một máy chủ trung tâm chuyển các tin nhắn từ ứng dụng khách của nhà xuất bản sang ứng dụng khách đăng ký và một hoặc nhiều ứng dụng khách, có thể là người đăng ký hoặc nhà xuất bản tin nhắn hoặc dữ liệu

Người môi giới có thể nói giống như người đưa thư, người đảm bảo thư được gửi đến người nhận tương ứng của họ. Chúng phải được thiết kế để có khả năng mở rộng và bảo mật cao, vì chúng là điểm tranh luận trung tâm cho các máy khách MQTT

Ở cấp độ cao, nhà môi giới hoạt động như một cổng định tuyến các tin nhắn đã xuất bản từ các ứng dụng của nhà xuất bản đến những người đăng ký thích hợp. Thông thường, các nhà môi giới có thể được triển khai trên nhiều cụm hoặc phiên bản và được đặt sau bộ cân bằng tải để có khả năng chịu lỗi tốt hơn. Các khách hàng MQTT xuất bản tin nhắn cho một nhà môi giới trung tâm [thường là một chủ đề] và các khách hàng khác có thể đăng ký cùng một chủ đề trên nhà môi giới để nhận những tin nhắn này

Mô hình kiến ​​trúc quán rượu/phụ MQTT

Do đó, một khách hàng xuất bản một thông báo cho [các] chủ đề, trong khi các khách hàng khác đăng ký chủ đề, để cho biết họ quan tâm đến việc nhận thông báo về. Người môi giới có một loại cơ chế lọc mà nó sử dụng để kiểm soát người đăng ký nào sẽ gửi tin nhắn đến. Điều này có nghĩa là nhà môi giới kiểm tra hoặc lọc người đăng ký [hoặc danh sách người đăng ký] về một chủ đề hoặc nhóm chủ đề cụ thể và gửi tin nhắn cho họ

Tóm lại, nhà môi giới đọc, xác nhận và xử lý tin nhắn [đòi hỏi phải xác định người đăng ký [các] chủ đề và gửi tất cả tin nhắn phù hợp cho họ] được gửi từ ứng dụng khách hoặc ứng dụng của nhà xuất bản

Ghi chú. MQTT dựa trên cách lọc tin nhắn, theo đó nhà môi giới gửi tin nhắn cho những người đăng ký quan tâm đến nội dung tin nhắn. Các tin nhắn thường chứa một chủ đề, được người môi giới sử dụng để tìm ra cách định tuyến các tin nhắn cụ thể đến các khách hàng đã đăng ký, phù hợp

Lọc dựa trên chủ đề đòi hỏi cách khách hàng [nhà xuất bản và người đăng ký] tương tác với nhà môi giới thông qua các chủ đề, đây là một phần của mọi tải trọng tin nhắn

Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn

Tìm hiểu thêm →

Cho đến nay, chúng tôi đã sử dụng một số thuật ngữ kỹ thuật nghe có vẻ mới đối với một số độc giả. Trong phần tiếp theo, chúng ta sẽ khám phá một số thuật ngữ này và ý nghĩa của chúng

Giải thích một số khái niệm kỹ thuật MQTT

  • Bridge – Một kết nối giữa hai nhà môi giới MQTT
  • Máy khách MQTT – Một thiết bị hoặc ứng dụng được viết thông qua thư viện máy khách MQTT kết nối với nhà môi giới MQTT qua mạng được bảo mật;
  • Tin nhắn – Đơn giản là tin nhắn để xuất bản, có thể là Bộ đệm, Chuỗi hoặc đối tượng JSON
  • Chủ đề – Một mã định danh chuỗi mà nhà môi giới sử dụng để lọc và gửi thông báo thích hợp đến các khách hàng được kết nối. Tên chủ đề thường được cấu trúc theo cách phân cấp như vậy với các dấu phân cách, được gọi là cấp độ chủ đề
    • Lưu ý rằng các tin nhắn phải chứa một chủ đề mà nhà môi giới có thể sử dụng để định tuyến tải trọng một cách thích hợp cho các khách hàng quan tâm
    • Ví dụ tên chủ đề.
      npm install mqtt -g 
      
      8
  • Nhà xuất bản – Ứng dụng khách của nhà xuất bản phân phối dữ liệu hoặc tin nhắn đến một chủ đề trên máy chủ/nhà môi giới cho các ứng dụng khách đăng ký khác, những người có thể quan tâm đến việc nhận những tin nhắn này
  • Internet of Things [IoT] – một thế giới của các thiết bị được kết nối bao gồm các hệ thống nhúng, thiết bị tự động hóa, mạng không dây và cơ chế điều khiển
  • Tách rời – Tách rời trong ngữ cảnh này có nghĩa là nhà xuất bản/người đăng ký chỉ cần biết tên máy chủ/IP và cổng của nhà môi giới — không giống như kiến ​​trúc máy khách-máy chủ truyền thống, nơi máy khách và máy chủ giao tiếp trực tiếp qua điểm cuối/API, thường ở định dạng URI

Làm việc với MQTT ở cấp ứng dụng

Bây giờ, chúng ta hãy xem cách MQTT hoạt động ở cấp ứng dụng. Chúng tôi sẽ sử dụng nút. thư viện máy khách js cho MQTT, mqtt. js

MQTT. js là một thư viện mã nguồn mở JavaScript dành cho giao thức MQTT, có thể áp dụng trong cả Node. js và trình duyệt. Thông thường, thư viện có thể được sử dụng để xuất bản tin nhắn và đăng ký chủ đề trên nhà môi giới MQTT

Những điểm cần lưu ý về MQTT. thư viện js

  • Hỗ trợ cả mô-đun ES và Common. kiểu nhập tệp js
  • Nó có giao diện API dựa trên Promise, vì bản thân MQTT hoạt động không đồng bộ
  • MQTT. js mặc định là MQTT v3 cũ. 1. 1, để hỗ trợ các nhà môi giới cũ, nhưng phiên bản mới nhất hiện tại là 5. 0
  • Máy khách MQTT đi kèm với trình xử lý lỗi sẵn có, rất hữu ích khi lập trình viên không xử lý được lỗi trong mã của họ

Lưu ý rằng cũng có sẵn các thư viện máy khách cho nhiều ngôn ngữ lập trình và cho các hệ điều hành chính [Linux, Windows và macOS]

Kết nối/Ngắt kết nối với nhà môi giới/máy chủ MQTT

Các kết nối máy khách luôn được xử lý bởi nhà môi giới/máy chủ, vì người đăng ký và nhà xuất bản MQTT là các ứng dụng riêng biệt, tách rời. Như chúng tôi đã đề cập trước đó, cả nhà xuất bản và người đăng ký đều là khách hàng MQTT và do đó cần được kết nối với cùng một nhà môi giới/máy chủ

Các máy khách không bao giờ kết nối trực tiếp với nhau; . Các triển khai hoặc biến thể MQTT khác cũng kết nối qua UDP [MQTT

Chủ Đề