Tôi có nên sử dụng các ký tự đặc biệt trong các chủ đề MQTT?


7

Tôi đã sử dụng MQTT để kết nối tất cả các đơn vị ESP8266 của mình nhưng tôi có một câu hỏi chung liên quan đến các chủ đề. Theo www.hivemq.com :

  • "Chém về phía trước" /nên tránh.
  • Không gian nên tránh.
  • Chỉ sử dụng các ký tự ASCII.
  • Nhúng một định danh duy nhất hoặc ClientId vào chủ đề.
  • Vân vân.

Tôi đã áp dụng khá nhiều cho việc này nhưng tôi sử dụng một số ký tự đặc biệt (ví dụ% và °). Ví dụ tôi sử dụng:

Garage_Sensor_001/Temperature/°C value

Livingroom_HID_002/Switch_001/Action value

Bedroom_Sensor_001/Motion_001/Detection value

I E

PLACEMENT_OF_NODE/TYPE_OF_SENSOR_UNIT_OR_ACTION/FUNDAMENTAL_UNIT_OF_VALUE_IF_ANY

Vì vậy, câu hỏi của tôi là: Tôi có nên sử dụng các ký tự đặc biệt khi đặt tên chủ đề MQTT?

Câu trả lời:


6

Goufalite hoàn toàn chính xác về vấn đề này: đó hoàn toàn không phải là vấn đề kỹ thuật, chỉ là vấn đề đặt tên, vì vậy rất nhiều lời khuyên được đánh giá dựa trên ý tưởng của tác giả về tên nào là tốt nhất.

Đặc tả MQTT 3.1 cho biết :

  • Tên chủ đề và Bộ lọc chủ đề phân biệt chữ hoa chữ thường
  • Tên chủ đề và Bộ lọc chủ đề có thể bao gồm ký tự khoảng trắng
  • Tên chủ đề và Bộ lọc chủ đề là các chuỗi được mã hóa UTF-8, chúng KHÔNG ĐƯỢC mã hóa thành hơn 65535 byte

Vì vậy, nói một cách đơn giản trên cơ sở kỹ thuật, các quy tắc chỉ ASCII và 'không có khoảng trắng' là không cần thiết; tất cả các nhà môi giới MQTT tuân thủ sẽ có thể xử lý chúng tốt.

Tôi thực sự không đồng ý với một số điểm mà HiveMQ đưa ra:

Một không gian là kẻ thù tự nhiên của mỗi lập trình viên, họ thường làm cho việc đọc và gỡ lỗi các chủ đề trở nên khó khăn hơn nhiều, khi mọi thứ không diễn ra như vậy, họ nên làm. Tương tự như cái đầu tiên, chỉ vì thứ gì đó được cho phép không có nghĩa là nó nên được sử dụng. UTF-8 biết nhiều loại khoảng trắng khác nhau, điều khá rõ ràng là nên tránh các ký tự không phổ biến như vậy.

Rất khó có khả năng bạn sẽ sử dụng khoảng trắng theo bất kỳ cách nào khác ngoài việc chỉ nhấn SPACEphím trên bàn phím của bạn, vì vậy tôi không nghĩ việc sử dụng homoglyphs vô tình thực sự là một vấn đề.

Việc sử dụng ký tự UTF-8 không phải ASCII khiến việc tìm lỗi chính tả hoặc các vấn đề liên quan đến bộ ký tự trở nên rất khó khăn, vì thường chúng không thể được hiển thị chính xác. Trừ khi thực sự cần thiết, chúng tôi khuyên bạn nên tránh sử dụng ký tự không phải ASCII trong một chủ đề.

Điểm công bằng - gõ các ký tự không phải ASCII có thể là một vấn đề lớn. Cá nhân, tôi sẽ tránh Garage_Sensor_001/Temperature/°Cđơn giản vì rất nhiều bàn phím không có biểu tượng độ tích hợp (bàn phím của Anh chắc chắn không!). Quyết định này thực sự dựa trên thực tiễn chứ không phải do giao thức; nếu bạn có thể sử dụng các ký tự đặc biệt mà không cần bận tâm nhiều, và bạn chắc chắn rằng không ai khác sẽ cần phải nhập các ký tự vào, hãy tìm nó!

Ngoài ra, tôi sẽ có một chút hoài nghi về một số lời khuyên của HiveMQ; hơn nữa trong trang bạn đã liên kết, nó nói "Đừng đăng ký #", đã bị tranh chấp trên trang web !


8

Tôi nghĩ việc đặt tên chủ đề là vấn đề tương tự như đặt tên biến : thiết kế ứng dụng chung.

Hãy biến nó theo một cách khác: làm thế nào để ngôn ngữ lập trình thực hiện của bạn quản lý các ký tự đặc biệt? Không gian? Điểm nhấn? ... Đặc biệt là khi bạn tách chúng ra, do đó, quy tắc "không chuyển tiếp".

Nếu bạn có quyền kiểm soát hoàn hảo đối với các loại tiền mã hóa UTF-8 / ASCII (hãy tin tôi, bạn không) thì hãy tiếp tục! Đặt dấu, chars đặc biệt!

Sau đó nghĩ về những điều sau đây, và điều này áp dụng cho tất cả các dự án:

  • Evolutivity: ai sẽ chăm sóc dự án của bạn? Bạn? Một cộng đồng nguồn mở? Giữ cho nó đơn giản cho bất kỳ ai (ngay cả bạn) để không phải nhập tên chủ đề phức tạp / dài.
  • I18N: hãy đối mặt với nó, các dự án phổ biến bằng tiếng Anh và hey, tiếng Anh không có điểm nhấn!

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.