Sự khác biệt giữa MQTT và Web Sockets là gì và khi nào tôi nên sử dụng chúng?


17

Sự khác biệt chính giữa MQTT và Web Sockets là gì?

Khi sử dụng IoT cho tự động hóa gia đình - kiểm soát và giám sát truy cập trên các thiết bị khác nhau, một trong số chúng nên được sử dụng khi cần có khả năng truy cập dựa trên API và trình duyệt.

Tôi đang sử dụng Java (Thư viện Pi4J) trên Raspberry Pi 2 B +.

Tôi có một thiết lập của một số cảm biến như ánh sáng và bóng tối, độ ẩm, PID, vv

Tôi cũng có một máy chủ đám mây nơi tôi có thể gửi dữ liệu nếu được yêu cầu.


1
Bạn quyết định sử dụng cái nào bằng cách xác định rõ ràng tất cả các yêu cầu hiện tại và có thể trong tương lai của bạn. Sau đó, bạn tạo ra một ma trận chéo cho thấy công nghệ nào đáp ứng tốt nhất các yêu cầu của bạn. Sau đó, bạn chọn sử dụng một hoặc nhiều công nghệ để đáp ứng yêu cầu của bạn.

Câu trả lời:


23

Cài đặt câu hỏi ở đây hơi sai lệch, bởi vì thực sự các giao thức này hoàn toàn không thể so sánh được với nhau. Chúng giống như TCP và IP, các lớp nằm trên nhau. [1]

Websockets là một giao thức cấp thấp để cung cấp những thứ mà RESTful http của đối thủ cạnh tranh ở cùng cấp không cung cấp: một kênh luôn mở mà không cần mở và đóng theo mọi yêu cầu. [2]

MQTT cung cấp một cách nhẹ nhàng để xuất bản hoặc đăng ký dữ liệu. Sự nhầm lẫn có thể là những thuê bao đó là một số loại kênh, nhưng đó là loại kênh khác nhau. Để tạo kết nối mở liên tục trong MQTT, bạn cần có Websockets VÀ MQTT cùng một lúc.

Trong IoT, cũng như trong bất kỳ thiết kế nào, bạn phải chọn xem bạn có cần luồng hay không (WebSockets vs RESTful) và về MQTT, bạn có thể phải suy nghĩ liệu bạn có muốn đăng ký và cơ chế xuất bản trên ứng dụng của mình không.

Trong một số trường hợp, bạn có thể xem xét MQTT qua WebSockets, nếu có bất kỳ điều gì phổ biến xung quanh. [3]

Trả lời câu hỏi:

Bạn nói rằng bạn có một thiết lập của Rasperry Pi và một số cảm biến xung quanh nơi này. Nếu các cảm biến cách xa Rasperry với bộ điều khiển riêng, bạn có thể sử dụng MQTT để thu thập dữ liệu. Để lưu trữ dữ liệu lên đám mây, hãy gửi dữ liệu bằng HTTP. Trong đám mây cung cấp dữ liệu thông qua phần còn lại. [4]

Đối với websockets không có nhu cầu, nhưng nếu bạn thấy nó hữu ích, hãy sử dụng nó.

Nguồn:

[1] https://www.quora.com/What-are-the-pros-and-cons-of-WebSockets-versus-MQTT-as-real-time-web-infr Hạ tầng-for-the-Internet-of -Nhiều thứ

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-under Hiểu-the-default /

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theiNETofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protatio-iot


3
Cũng liên quan đến điểm cuối cùng của bạn: Câu trả lời này của Roger Light, nhà phát triển của nhà môi giới Mosquitto MQTT so sánh các trường hợp sử dụng ổ cắm thô với ổ cắm web với MQTT.
Aurora0001

Cảm ơn bạn mico đó là một lời giải thích tuyệt vời. nhưng tôi vẫn chưa rõ nên sử dụng cái gì .. bạn muốn giới thiệu gì cho kịch bản của tôi?
Shakti Phartiyal

3
Câu trả lời tuyệt vời, nhưng: Sử dụng WRT WS "mở và đóng" : so với HTTP: // có thể gây hiểu nhầm; đầu tiên, các yêu cầu HTTP 1.1 có thể được sắp xếp theo đường ống, do đó, ở cấp độ ổ cắm theo nghĩa đen, một kết nối có thể bao gồm số lượng yêu cầu không xác định mà không cần mở và đóng theo nghĩa đó. Sẽ tốt hơn nếu nói lợi thế của websockets là không có cam kết đối với chu trình "yêu cầu và phản hồi" đồng bộ ; bạn có một kênh hai chiều mở với một bộ quy tắc tối thiểu để trao đổi.
goldilocks

"Để tạo kết nối mở liên tục trong MQTT, bạn cần có Websockets VÀ MQTT cùng một lúc." Bạn có chắc chắn về điều này? Vui lòng giải thích lý do tại sao MQTT phải sử dụng webSockets để giữ "kết nối mở liên tục" nếu máy khách có thể tiếp tục xuất bản các gói PINGRESP trở lại máy chủ? Một máy khách triển khai MQTT sẽ gửi gói PINGRESP để duy trì kết nối và một máy khách webSockets sẽ sử dụng keepAlive () để gửi một gói webSocket.send ('') trống đến máy chủ để duy trì kết nối.
John

Hmm .. Bạn có thể giữ kết nối sống với gói đó . Tôi phát hiện ra rằng MQTT hoạt động trên TCP / IP (không phải HTTP). Trong trường hợp đó bạn có thể để kết nối mở.
mico

9

Chúng có thể so sánh ở chỗ cả hai đều cho phép bạn có giao tiếp song công hoàn toàn sao cho máy chủ có thể ngay lập tức truyền dữ liệu đến máy khách mà không cần máy khách bỏ phiếu cho nó (như có thể với HTTP).

Tuy nhiên, Websockets được thiết kế để kết nối điểm-điểm đơn giản giữa máy khách và máy chủ. Các lớp MQTT trừu tượng thêm vào đầu gửi tin nhắn cơ bản, để nhiều bên quan tâm có thể đăng ký các tin nhắn có thể khiến họ quan tâm. Do đó, tin nhắn có thể được định tuyến theo 'chủ đề tin nhắn' để nhiều khách hàng có thể chia sẻ hàng đợi công chứng, trong đó máy chủ có thể chọn nghe tất cả tin nhắn từ tất cả khách hàng, nhưng cũng có thể lọc theo chủ đề.

MQTT có nhiều tính năng hữu ích khác, ví dụ như tin nhắn được giữ lại, như người đăng ký ngay lập tức nhận được tin nhắn và LWT (Di chúc cuối cùng và Di chúc) là một tin nhắn có thể được gửi tự động nếu khách hàng ngắt kết nối bất thường. Tóm lại, MQTT là 'các tính năng và tính trừu tượng cao hơn của ngăn xếp mà một Websocket đơn giản không 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.