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

Máy chủ mqtt nodejs



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
https://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

Máy chủ mqtt nodejs



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
https://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áy chủ mqtt nodejs
Máy chủ mqtt nodejs
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


Máy chủ mqtt nodejs
Máy chủ mqtt nodejs

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

Máy chủ mqtt nodejs
Máy chủ mqtt nodejs
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<-SN). Người môi giới chịu trách nhiệm về.
Brokers are responsible for:

  • Nhận tất cả tin nhắn
  • Lọc những cái phù hợp bằng cách xác định ứng dụng khách đăng ký nào đã đăng ký từng tin nhắn
  • Kết nối/phiên liên tục giữa các máy khách
  • Xác thực và ủy quyền cho khách hàng
  • Gửi tin nhắn đến đúng khách hàng

Các nhà môi giới nên dễ dàng mở rộng quy mô và tích hợp vào các hệ thống phụ trợ khác nhau. Chúng có thể khá chịu lỗi, vì chúng là điểm quan trọng nhất trong giao tiếp giữa nhà xuất bản/người đăng ký

Để kết nối với nhà môi giới lần đầu tiên, khách hàng gửi tin nhắn

npm install mqtt -g 
0. Sau khi bắt đầu, nhà môi giới trả về một tin nhắn
npm install mqtt -g 
1 và mã trạng thái. Một điều quan trọng khác cần lưu ý là nhà môi giới luôn giữ kết nối hoạt động hoặc mở, trừ khi khách hàng gửi sự kiện ngắt kết nối hoặc kết nối internet của họ bị ngắt

Có một số nhà môi giới MQTT phổ biến, được lưu trữ miễn phí hiện nay. Mosquitto của Eclipse là một trong số đó và nó chạy trên tất cả các hệ điều hành chính

Ngoài ra còn có các nhà môi giới được lưu trữ hoặc dựa trên đám mây thương mại khác, như HIVEMQ. Chúng thường hữu ích nếu chúng tôi không có ý định cài đặt và quản lý các nhà môi giới của riêng mình. Bạn có thể tìm một nhà môi giới MQTT tốt để thử nghiệm nhanh trên trang web MQTT

Cài đặt thư viện khách hàng của chúng tôi

Để cài đặt MQTT. js, hãy chạy lệnh sau

npm install mqtt --save  

Lưu ý rằng MQTT. js gói một lệnh để tương tác với một nhà môi giới. Để giao diện giao thức MQTT có sẵn trên đường dẫn hệ thống của bạn, chúng tôi có thể cài đặt nó trên toàn cầu

npm install mqtt -g 

Khi kết thúc quá trình cài đặt, tệp

npm install mqtt -g 
2 của chúng ta sẽ trông như thế này

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 

Để kiểm tra chương trình, bạn có thể chạy nhà xuất bản trên một cửa sổ đầu cuối và chạy thuê bao trên một cửa sổ đầu cuối khác


Các bài viết hay khác từ LogRocket

  • Đừng bỏ lỡ một khoảnh khắc nào với The Replay, một bản tin được tuyển chọn từ LogRocket
  • Tìm hiểu cách Galileo của LogRocket loại bỏ tiếng ồn để chủ động giải quyết các sự cố trong ứng dụng của bạn
  • Sử dụng useEffect của React để tối ưu hóa hiệu suất ứng dụng của bạn
  • Chuyển đổi giữa nhiều phiên bản của Node
  • Khám phá cách tạo hoạt ảnh cho ứng dụng React của bạn với AnimXYZ
  • Khám phá Tauri, một khuôn khổ mới để xây dựng các tệp nhị phân
  • So sánh NestJS với. Thể hiện. js

Tạo ứng dụng khách xuất bản MQTT

Bây giờ, hãy để chúng tôi tạo một ứng dụng khách MQTT xuất bản tin nhắn. Để làm như vậy, chúng ta có thể nhập MQTT. js và sử dụng phương thức kết nối

const mqtt = require('mqtt') 
require('dotenv').config() 


const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 

Lưu ý rằng chúng tôi đã thêm

npm install mqtt -g 
3 vào tệp môi trường của mình. Như chúng ta có thể thấy, phương thức
npm install mqtt -g 
4 chấp nhận một URL nhất định (URL máy chủ môi giới) và một đối tượng tùy chọn máy chủ tùy chọn. Các giao thức được chấp nhận có thể là
npm install mqtt -g 
5,
npm install mqtt -g 
6,
npm install mqtt -g 
7,
npm install mqtt -g 
8,
npm install mqtt -g 
9, v.v. Phương thức kết nối trả về một máy khách được kết nối

Để thử kết nối lại khi kết nối máy khách MQTT bị hỏng, chúng tôi có thể đặt tùy chọn

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
0 (khoảng thời gian giữa hai lần kết nối lại) lớn hơn 0. Giá trị mặc định là
//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
1 giây, có nghĩa là sau khi ngắt kết nối, nó sẽ cố gắng mở lại kết nối gần như ngay lập tức

npm install mqtt -g 
6

Nếu chúng tôi đặt giá trị của tùy chọn máy khách

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
0 thành
//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
3, kết nối lại sẽ bị vô hiệu hóa và chấm dứt khi kết nối bị ngắt

Khi tùy chọn đăng ký lại được đặt thành giá trị mặc định (

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
4), khách hàng có thể tự động kết nối lại và đăng ký lại chủ đề đã đăng ký trước đó khi kết nối bị hỏng. Đặc biệt nhất đối với các nhà môi giới tự lưu trữ, chúng tôi có thể muốn xác thực bằng tên người dùng và mật khẩu. Có thể tìm thấy thêm chi tiết về đối tượng tùy chọn máy chủ trên MQTT GitHub

Xuất bản dữ liệu và thông điệp

Sau khi được kết nối với nhà môi giới, ứng dụng khách MQTT có thể gửi tin nhắn gần như ngay lập tức. Sự kiện xuất bản có tải trọng tin nhắn và tên chủ đề mà nhà môi giới có thể sử dụng để xác định các bên đã đăng ký. Ngoài ra, có một tùy chọn gọi lại để kiểm tra lỗi hoặc khi gói tin đã được truyền đi

Loại thông báo đã xuất bản hoặc gói được gửi có các thuộc tính sau

  • //package.json
    {
    "name": "mqtt-demo", 
      "version": "1.0.0", 
      "description": "A node.js and MQTT demo", 
      "main": "index.js", 
      "scripts": { 
        "start-publisher": "nodemon publisher.js", 
        "start-consumer": "nodemon subscriber.js" 
      }, 
      "keywords": [ 
        "Node.js", 
        "MQTT", 
        "Pub/Sub", 
        "IoT", 
        "message", 
        "transport" 
      ], 
      "author": "Alexander Nnakwue", 
      "license": "MIT", 
      "dependencies": { 
        "dotenv": "^10.0.0", 
        "mqtt": "^4.3.2" 
      }, 
      "devDependencies": { 
        "nodemon": "^2.0.15" 
      } 
    } 
    
    5
  • //package.json
    {
    "name": "mqtt-demo", 
      "version": "1.0.0", 
      "description": "A node.js and MQTT demo", 
      "main": "index.js", 
      "scripts": { 
        "start-publisher": "nodemon publisher.js", 
        "start-consumer": "nodemon subscriber.js" 
      }, 
      "keywords": [ 
        "Node.js", 
        "MQTT", 
        "Pub/Sub", 
        "IoT", 
        "message", 
        "transport" 
      ], 
      "author": "Alexander Nnakwue", 
      "license": "MIT", 
      "dependencies": { 
        "dotenv": "^10.0.0", 
        "mqtt": "^4.3.2" 
      }, 
      "devDependencies": { 
        "nodemon": "^2.0.15" 
      } 
    } 
    
    6
  • //package.json
    {
    "name": "mqtt-demo", 
      "version": "1.0.0", 
      "description": "A node.js and MQTT demo", 
      "main": "index.js", 
      "scripts": { 
        "start-publisher": "nodemon publisher.js", 
        "start-consumer": "nodemon subscriber.js" 
      }, 
      "keywords": [ 
        "Node.js", 
        "MQTT", 
        "Pub/Sub", 
        "IoT", 
        "message", 
        "transport" 
      ], 
      "author": "Alexander Nnakwue", 
      "license": "MIT", 
      "dependencies": { 
        "dotenv": "^10.0.0", 
        "mqtt": "^4.3.2" 
      }, 
      "devDependencies": { 
        "nodemon": "^2.0.15" 
      } 
    } 
    
    7
  • //package.json
    {
    "name": "mqtt-demo", 
      "version": "1.0.0", 
      "description": "A node.js and MQTT demo", 
      "main": "index.js", 
      "scripts": { 
        "start-publisher": "nodemon publisher.js", 
        "start-consumer": "nodemon subscriber.js" 
      }, 
      "keywords": [ 
        "Node.js", 
        "MQTT", 
        "Pub/Sub", 
        "IoT", 
        "message", 
        "transport" 
      ], 
      "author": "Alexander Nnakwue", 
      "license": "MIT", 
      "dependencies": { 
        "dotenv": "^10.0.0", 
        "mqtt": "^4.3.2" 
      }, 
      "devDependencies": { 
        "nodemon": "^2.0.15" 
      } 
    } 
    
    8
  • //package.json
    {
    "name": "mqtt-demo", 
      "version": "1.0.0", 
      "description": "A node.js and MQTT demo", 
      "main": "index.js", 
      "scripts": { 
        "start-publisher": "nodemon publisher.js", 
        "start-consumer": "nodemon subscriber.js" 
      }, 
      "keywords": [ 
        "Node.js", 
        "MQTT", 
        "Pub/Sub", 
        "IoT", 
        "message", 
        "transport" 
      ], 
      "author": "Alexander Nnakwue", 
      "license": "MIT", 
      "dependencies": { 
        "dotenv": "^10.0.0", 
        "mqtt": "^4.3.2" 
      }, 
      "devDependencies": { 
        "nodemon": "^2.0.15" 
      } 
    } 
    
    9 hoặc
    const mqtt = require('mqtt') 
    require('dotenv').config() 
    
    
    const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
    const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
    
    0
  • const mqtt = require('mqtt') 
    require('dotenv').config() 
    
    
    const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
    const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
    
    1

Lệnh như hình bên dưới

npm install mqtt --save  
7

Khi khách hàng gửi tin nhắn đến nhà môi giới, nhà môi giới sẽ xử lý tin nhắn dựa trên một số tiêu chí do nhà phát triển đặt ra. Điều này nên bao gồm mức QoS, xác định loại tin nhắn có đảm bảo gì để tiếp cận người nhận dự định và đảm bảo đảm bảo gửi tin nhắn

Giai đoạn xử lý thường đòi hỏi phải đọc, xác nhận và xác định khách hàng đã đăng ký chủ đề. Bước cuối cùng là gửi tin nhắn cho khách hàng đã đăng ký

Đây là mã hoàn chỉnh cho tệp

const mqtt = require('mqtt') 
require('dotenv').config() 


const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
2, bao gồm một số phương thức/API công khai

npm install mqtt --save  
9

Tiếp theo, chúng ta có thể tiếp tục và triển khai ứng dụng khách đăng ký, ứng dụng này sẽ tiêu thụ các thông báo về các chủ đề

đăng ký tin nhắn

Để nhận tin nhắn về các chủ đề chúng tôi quan tâm, khách hàng gọi sự kiện

const mqtt = require('mqtt') 
require('dotenv').config() 


const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
3 cho nhà môi giới. Tin nhắn đã đăng ký thường chứa tải trọng gói tin nhắn, như được hiển thị bên dưới

npm install mqtt -g 
1

Thay vì có tên chủ đề dưới dạng các chuỗi được phân tách thông thường, chúng tôi cũng có thể lưu trữ các chủ đề dưới dạng ký tự đại diện để người đăng ký có thể dễ dàng đăng ký các mẫu chủ đề, thay vì một chủ đề tại một thời điểm. Nhà xuất bản và khách hàng đăng ký cần biết trước tên chủ đề cho các mẫu để thực hiện việc này

Lưu ý rằng khách hàng đăng ký cần biết trước cấu trúc của dữ liệu họ sẽ nhận được để họ có thể xử lý dữ liệu một cách thích hợp. Nhà xuất bản gửi tin nhắn đến một chủ đề cụ thể trong trình môi giới ở một định dạng cụ thể và người đăng ký dự định của tin nhắn đó cần biết dữ liệu đó được cấu trúc như thế nào để họ có thể xử lý chính xác mà không làm hỏng ứng dụng

Mã hoàn chỉnh cho ứng dụng khách đăng ký được hiển thị trong tệp bên dưới

npm install mqtt -g 
2

Các tính năng MQTT bổ sung

Một số tính năng của MQTT được mô tả bên dưới

tin nhắn được giữ lại

Tin nhắn được giữ lại là tin nhắn MQTT có tùy chọn/cờ được giữ lại được đặt thành

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
4. Theo mặc định, khi người môi giới/máy chủ nhận được tin nhắn cho một chủ đề không có người đăng ký, tin nhắn sẽ bị loại bỏ. Tuy nhiên, MQTT có cơ chế giữ lại các tin nhắn này bằng cách đặt cờ, cho phép nhà xuất bản giữ lại tin nhắn. Lưu ý rằng nhà môi giới chỉ lưu trữ một tin nhắn được giữ lại cho mỗi chủ đề

Hỗ trợ xác thực và bảo mật dữ liệu rộng rãi

MQTT hỗ trợ các phương thức xác thực và cơ chế bảo mật dữ liệu khác nhau, bao gồm TLS và OAuth, thường được định cấu hình trên trình môi giới MQTT. Do đó, điều này có nghĩa là các máy khách triển khai các máy chủ này cần tuân thủ các cơ chế như đã xác định

Theo mặc định, MQTT hỗ trợ cơ chế kết nối lại để thiết lập các kết nối liên tục ở những khu vực có kết nối thấp. Điều này rất quan trọng để lưu trữ tin nhắn, nhưng không giống như các hệ thống xếp hàng truyền thống, các nhà môi giới không chỉ lưu trữ tin nhắn. MQTT lưu trữ tin nhắn bằng cách đảm bảo rằng các phiên máy khách liên tục và mức QoS lớn hơn

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
3

Chất lượng dịch vụ (QoS)

Để xử lý các thách thức điển hình trong hệ thống quán rượu/phụ, MQTT đã triển khai ba cấp độ Chất lượng dịch vụ (QoS). Ba cấp độ này bao gồm 0, 1 và 2. và chúng xác định hình thức bảo đảm nào mà một tin nhắn có thể đến được với người nhận dự định (khách hàng hoặc người môi giới)

Để hỗ trợ gửi tin nhắn đáng tin cậy, giao thức hỗ trợ ba loại tin nhắn chất lượng dịch vụ riêng biệt

  • 0 – nhiều nhất một lần
  • 1 – ít nhất một lần
  • 2 – chính xác một lần

Để lưu trữ tin nhắn, khách hàng phải đăng ký một chủ đề có Chất lượng dịch vụ lớn hơn

//package.json
{
"name": "mqtt-demo", 
  "version": "1.0.0", 
  "description": "A node.js and MQTT demo", 
  "main": "index.js", 
  "scripts": { 
    "start-publisher": "nodemon publisher.js", 
    "start-consumer": "nodemon subscriber.js" 
  }, 
  "keywords": [ 
    "Node.js", 
    "MQTT", 
    "Pub/Sub", 
    "IoT", 
    "message", 
    "transport" 
  ], 
  "author": "Alexander Nnakwue", 
  "license": "MIT", 
  "dependencies": { 
    "dotenv": "^10.0.0", 
    "mqtt": "^4.3.2" 
  }, 
  "devDependencies": { 
    "nodemon": "^2.0.15" 
  } 
} 
3

Dữ liệu bất khả tri

MQTT không liên quan đến dữ liệu và trường hợp sử dụng của máy khách xác định cách cấu trúc tải trọng. Do đó, có thể gửi bất kỳ loại tin nhắn nào, bao gồm hình ảnh, văn bản được mã hóa, dữ liệu được mã hóa, v.v.

Ghi chú. Cổng MQTT không được mã hóa mặc định là

const mqtt = require('mqtt') 
require('dotenv').config() 


const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
7. Cổng TCP/IP được mã hóa
const mqtt = require('mqtt') 
require('dotenv').config() 


const clientId = 'mqttjs_' + Math.random().toString(8).substr(2, 4) 
const client  = mqtt.connect(process.env.BROKER_URL, {clientId: clientId}); 
8 cũng được hỗ trợ để sử dụng MQTT qua SSL

Sự kết luận

MQTT cung cấp mô hình nhắn tin pub/sub hai chiều phù hợp với các khu vực hạn chế băng thông mạng. Các dịch vụ độc lập với các ứng dụng chính của chúng tôi vì chúng được tách rời và các nhà môi giới hoặc máy chủ có thể được thu nhỏ riêng lẻ

Đây là danh sách các dự án nguồn mở tận dụng giao thức MQTT trên GitHub. Chi tiết về ứng dụng demo của chúng tôi có thể được tìm thấy trên GitHub và bạn cũng có thể tìm thấy chi tiết về tiêu chuẩn MQTT trên GitHub

Chỉ dành cho 200 Theo dõi các yêu cầu mạng chậm và không thành công trong sản xuất

Triển khai trang web hoặc ứng dụng web dựa trên Node là phần dễ dàng. Đảm bảo phiên bản Node của bạn tiếp tục cung cấp tài nguyên cho ứng dụng của bạn là lúc mọi thứ trở nên khó khăn hơn. Nếu bạn quan tâm đến việc đảm bảo các yêu cầu đối với dịch vụ phụ trợ hoặc bên thứ ba thành công, hãy thử LogRocket.
Máy chủ mqtt nodejs
Máy chủ mqtt nodejs
https. // tên lửa. com/đăng ký/

LogRocket giống như một DVR dành cho ứng dụng web và thiết bị di động, ghi lại mọi thứ diễn ra trong khi người dùng tương tác với ứng dụng của bạn theo đúng nghĩa đen. Thay vì đoán xem tại sao lại xảy ra sự cố, bạn có thể tổng hợp và báo cáo về các yêu cầu mạng có vấn đề để nhanh chóng hiểu nguyên nhân gốc rễ