พื้นหลัง
MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลการรับส่งข้อความแบบบอกรับสมาชิกที่ใช้มาตรฐาน ISO ( Wikipedia )
แต่ละข้อความมีหัวข้อเช่นตัวอย่างต่อไปนี้:
myhome/groundfloor/livingroom/temperature
USA/California/San Francisco/Silicon Valley
5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status
Germany/Bavaria/car/2382340923453/latitude
ลูกค้า MQTT อาจสมัครสมาชิกหัวข้อข้อความโดยใช้สัญลักษณ์แทน:
- ระดับเดียว:
+
- ทุกระดับเป็นต้นไป:
#
ตัวอย่างเช่นการสมัครสมาชิกmyhome/groundfloor/+/temperature
จะสร้างผลลัพธ์เหล่านี้ (ไม่สอดคล้องตามตัวหนา ):
✅ myhome / ชั้นล่าง / ห้องรับแขก / อุณหภูมิ
✅ myhome / ชั้นล่าง / ห้องครัว / อุณหภูมิ
❌ myhome / ชั้นล่าง / ห้องรับแขก / ความสว่าง
❌ myhome / ชั้นแรก / ห้องรับแขก / อุณหภูมิ
❌ โรงรถ / พื้น / ตู้เย็น / อุณหภูมิ
ในขณะที่การสมัครสมาชิก+/groundfloor/#
จะให้ผลลัพธ์เหล่านี้:
✅ myhome / ชั้นล่าง / ห้องรับแขก / อุณหภูมิ
✅ myhome / groundfloor / ครัว / ความสว่าง
✅โรงรถ / พื้น / ตู้เย็น / อุณหภูมิ / เพิ่มเติม / เฉพาะ / สาขา
❌ myhome / firstfloor / ห้องรับแขก / อุณหภูมิ
❌ myhome / ชั้นใต้ดิน / มุม / อุณหภูมิ
งาน
ใช้ฟังก์ชั่น / โปรแกรมที่ยอมรับสองสตริงและส่งคืนบูลีน สตริงแรกคือหัวข้อเรื่องที่สองคือหัวข้อเกณฑ์ หัวข้อเกณฑ์ใช้ไวยากรณ์การสมัครสมาชิกซึ่งมีรายละเอียดด้านบน ฟังก์ชั่นนี้เป็นจริงเมื่อวัตถุนั้นตรงกับเกณฑ์
กฎสำหรับงานนี้:
- หัวข้อคือ ASCII
- ไม่มีฟิลด์เงื่อนไขนอกเหนือจาก
#
สัญลักษณ์ตัวแทน - สัญลักษณ์แทนไม่ปรากฏในหัวข้อเรื่อง
- จำนวนฟิลด์หัวเรื่อง> = จำนวนฟิลด์เกณฑ์
- ไม่มีฟิลด์ 0 อักขระหรือสแลชนำหน้าหรือต่อท้าย
กรณีทดสอบ
criteria1 = "myhome / groundfloor / + / temperature"
criteria2 = "+ / groundfloor / #"
("abc", "ab") => false
("abc", "abc") => true
("abc / de", "abc") => false
("myhome / groundfloor / ห้องรับแขก / อุณหภูมิ", criteria1 ) => จริง
("myhome / groundfloor / ครัว / อุณหภูมิ", criteria1) => จริง
("myhome / groundfloor / ห้องรับแขก / ความสว่าง", criteria1) => false
("myhome / firstfloor / ห้องรับแขก / อุณหภูมิ", criteria1) = > false
("โรงรถ / พื้น / ตู้เย็น / อุณหภูมิ", criteria1) => false
("myhome / groundfloor / ห้องรับแขก / อุณหภูมิ", criteria2) => จริง
("myhome / groundfloor / ครัว / ความสว่าง", criteria2) => true
("โรงรถ / ชั้นล่าง / ตู้เย็น / อุณหภูมิ / เพิ่มเติม / เฉพาะ / ฟิลด์ ", criteria2) => จริง
(" myhome / firstfloor / ห้องรับแขก / อุณหภูมิ ", criteria2) => false
("myhome / basement / corner / อุณหภูมิ", criteria2) => false
("music / kei $ ha / ล่าสุด", "+ / kei $ ha / +") => true
a/b/c
จะไม่ตรงกับเกณฑ์a/b
ดังนั้นฉันมีความโน้มเอียงที่จะบอกว่าไม่มี