MQTT ครบ 25 ปี
(andypiper.co.uk)- MQTT เป็นโปรโตคอลที่เริ่มจากการเผยแพร่สเปกครั้งแรกในเดือนตุลาคม 1999 และตลอด 25 ปีที่ผ่านมาได้ขยายจากโปรโตคอลน้ำหนักเบาสำหรับอุปกรณ์ขนาดเล็กและเครือข่ายที่ไม่เสถียร ไปสู่การใช้งานในภาคอุตสาหกรรม บ้าน และแอปต่าง ๆ
- โครงสร้าง publish/subscribe ที่เรียบง่าย ซึ่งออกแบบมาบนสมมติฐานของพลังงานจำกัดและการเชื่อมต่อที่ขาดช่วง ยังคงเป็นจุดแข็งแม้สภาพแวดล้อมของเครือข่ายและอุปกรณ์เอดจ์จะเปลี่ยนไปแล้ว
- MQTT ที่เคยถูกใช้งานอยู่รอบ ๆ IBM เริ่มแพร่หลายสู่ชุมชนอย่างจริงจังในช่วงปี 2009~2011 และขยายออกเป็นระบบนิเวศของโปรโตคอลเปิดนอก IBM ผ่าน Mosquitto และ Eclipse Paho
- ปัจจุบัน MQTT ถูกใช้อยู่ในหลายที่โดยที่ผู้ใช้ไม่ทันสังเกต เช่น การประมวลผลข้อความบน Raspberry Pi ที่ใช้ Node-RED, เครื่องฟอกอากาศ Dyson และแอป, การควบคุมเครื่องพิมพ์ 3D, การแจ้งเตือนภายในบ้าน และโรงงานการผลิต
- ในวาระครบรอบ 25 ปี ชุมชนได้ย้ายจากบัญชีโปรเจกต์เก่าบน X ไปยัง Mastodon ที่ @mqtt@fosstodon.org และโพสต์ข้อความแรกบน Fediverse ที่ใช้ ActivityPub แล้ว
การรับส่งข้อความแบบน้ำหนักเบาที่เริ่มจากสภาพแวดล้อมจำกัด
- เดือนตุลาคม 2024 เป็นช่วงครบรอบ 25 ปี นับจากการเผยแพร่เอกสารที่ต่อมาได้นำไปสู่สเปกแรกของ MQTT
- MQTT เป็นโปรโตคอลเครือข่ายที่ออกแบบโดยตั้งสมมติฐานถึงอุปกรณ์ขนาดเล็กและมีข้อจำกัดในช่วงปลายทศวรรษ 1990 รวมถึงเครือข่ายที่เบาหรือไม่เสถียร
- จุดเน้นคือการส่งข้อมูลจากเซนเซอร์ไปยังระบบที่ใหญ่กว่า ในสถานการณ์ที่การเชื่อมต่อขาดช่วงและพลังงานมีจำกัด เช่น อุปกรณ์ตรวจวัดสภาพแวดล้อมที่อยู่ห่างไกล
- อุปกรณ์เหล่านี้ต้องใช้พลังงาน แบนด์วิดท์ และความพร้อมใช้งานของเครือข่ายอย่างประหยัด
- MQTT เหมาะกับวิธีการเผยแพร่และเก็บรวบรวม/รับข้อมูลในรูปแบบที่เล็กแต่ใช้งานได้จริง
- แม้เครือข่ายจะเร็วขึ้นและเสถียรมากขึ้น และมีอุปกรณ์เอดจ์ ระบบบ้านอัตโนมัติ และอุปกรณ์พกพาเพิ่มขึ้น ความเรียบง่ายของโปรโตคอล ก็ยังคงเป็นจุดแข็งหลักของ MQTT
จากรอบ ๆ IBM สู่ระบบนิเวศแบบเปิด
- หลังเข้าร่วม IBM ในปี 2001 ผู้เขียนได้ทำโปรเจกต์ลูกค้าที่เกี่ยวข้องกับ IBM MQ, การบูรณาการทางธุรกิจ, message queuing, การเชื่อมต่อแอปพลิเคชัน และมิดเดิลแวร์
- IBM Hursley Lab เป็นฐานสำคัญของ MQ และยังเป็นสถานที่ทำงานของ Andy Stanford-Clark ผู้ร่วมสร้าง MQTT ทำให้การทดลองเกี่ยวกับ MQTT เริ่มต้นขึ้นรอบ ๆ ที่นั่น
- ในเวลานั้น MQTT แม้จะถูกเปิดเผยออกสู่ภายนอกในฐานะโปรโตคอลแล้ว แต่ยังไม่ค่อยเป็นที่รู้จักหรือถูกนำไปใช้อย่างแพร่หลายนอก IBM
- ราวปี 2009~2011 เริ่มมีความคืบหน้าในการทำให้ MQTT เป็นที่รู้จักนอกขอบเขตการใช้งานขนาดเล็กภายใน IBM
- ในเวลานั้นตัวเลือกของ broker ได้แก่ IBM WebSphere Message Broker สำหรับองค์กรที่มีราคาแพง, microbroker แบบปิดซอร์ส และ Really Small Message Broker ที่ปิดซอร์สแต่เปิดให้ใช้ฟรี
- Mosquitto แบบโอเพนซอร์สที่สร้างโดย Roger Light เป็นหนึ่งใน implementation ฟรีที่ยังถูกใช้อย่างแพร่หลายจนถึงปัจจุบัน
- Roger Light สร้าง Mosquitto หลังจากฟังการนำเสนอเรื่องสมาร์ตโฮมที่เชื่อมต่อกันของ Andy Stanford-Clark ในงาน OggCamp ครั้งแรกเมื่อปี 2009 ซึ่งเกิดขึ้น 10 ปีหลังจากวันที่สร้างสเปก
Eclipse Paho และการทำให้เป็นมาตรฐานอย่างเป็นทางการ
- ในปี 2011 implementation ของ MQTT จาก IBM ถูกบริจาคให้กับชุมชน Eclipse จนเกิดเป็นโปรเจกต์ Eclipse Paho
- แม้ออกจาก IBM ในปี 2012 ความเชื่อมโยงกับโปรเจกต์ Paho ก็ยังดำเนินต่อไป และยังรับบทบาทนี้ในช่วงที่ทำงานกับ Cloud Foundry
- หลังเข้าร่วม Twitter ในปี 2014 ผู้เขียนก็ถอยออกจากการมีส่วนร่วมอย่างเป็นทางการ
- ในช่วงนั้น MQTT ได้ผ่านกระบวนการมาตรฐานอย่างเป็นทางการกับ OASIS และ ISO/IEC
MQTT ในที่ที่มองไม่เห็นทุกวันนี้
- MQTT ได้ก้าวข้ามขอบเขตของ IBM และกลายเป็น กรณีศึกษาความสำเร็จของโปรโตคอลเปิด โดยหลังผ่านไป 25 ปี มันได้เข้าไปอยู่ในผลิตภัณฑ์และสถานที่มากมายที่ผู้ใช้ไม่ทันรับรู้
- ตัวอย่างการใช้งานที่เด่น ๆ ได้แก่
- โปรเจกต์ของนักพัฒนาสายงานอดิเรกและเมกเกอร์
- เครื่องฟอกอากาศ Dyson และแอปที่เกี่ยวข้อง
- ระบบควบคุมเครื่องพิมพ์ 3D
- ระบบแจ้งเตือนภายในบ้าน
- ภาคอุตสาหกรรมและโรงงานการผลิต
- แม้แต่ในพื้นที่ทำงานส่วนตัว MQTT ก็ถูกใช้งานอยู่หลายรูปแบบ
- เครื่องพิมพ์ 3D Bambu Lab X1C ใช้ MQTT สำหรับการสื่อสารภายใน
- อุปกรณ์เชื่อมต่อที่ติดอยู่บนผนังตอบสนองต่อการแจ้งเตือนผ่าน MQTT เพื่อแสดงข้อมูลหรือเปิดไฟ
- Node-RED ที่รันบน Raspberry Pi ทำหน้าที่ประมวลผลข้อความ MQTT
- มีความเป็นไปได้สูงว่าอย่างน้อยหนึ่งแอปในโทรศัพท์ของคุณกำลังใช้ MQTT อยู่ที่ใดที่หนึ่งในสแตก
ครบรอบ 25 ปีและการย้ายของชุมชน
- บัญชีชุมชนของ MQTT ได้ย้ายไปยัง Mastodon แทนบัญชีโปรเจกต์เดิมบน X
- สามารถติดตามบัญชีใหม่ได้ที่ @mqtt@fosstodon.org
- เพื่อฉลองครบรอบ 25 ปี MQTT ได้โพสต์ข้อความแรกบน Fediverse ผ่าน ActivityPub และเข้าร่วม open social web
- Andy Stanford-Clark ได้พูดคุยแบบ fireside chat กับ HiveMQ และยังแนะนำพอดแคสต์ของ HiveMQ ชื่อ The Unstructured Message ว่าเป็นอีกแหล่งสำหรับติดตามเนื้อหาเกี่ยวกับ MQTT
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
โปรเจกต์แรกที่ยัง ใช้งานอยู่ และถูกใช้ทุกวัน คือการนำแผนที่ SVG ของระบบน้ำ—ท่อ/ปั๊ม/วาล์วสำหรับทำหิมะและดับเพลิง—ของสกีรีสอร์ตขนาดใหญ่ มาทำเป็นเว็บไซต์แสดงสถานะ
สร้าง MQTT topic สำหรับปั๊ม วาล์ว และช่วงท่อแต่ละส่วน แล้วผูกสถานะอย่างทิศทางการไหลของน้ำ การเปิด/ปิดปั๊ม/วาล์ว และแรงดัน จากนั้นใช้ mqtt.js กับ jQuery เพื่ออัปเดตสีและการเติมสีของ SVG
MQTT broker ที่รันเป็นคอนเทนเนอร์บน static hosting ทำงานมาเกือบ 10 ปีโดยแทบไม่ต้องแตะต้อง และ mqtt.js ทำงานบน WebSocket ทำให้เมื่อสถานะเปลี่ยนก็สะท้อนให้ทุกคนเห็นโดยอัตโนมัติ
ลองใช้ MQTT ในโปรเจกต์ล่าสุด แต่ไม่ได้ประทับใจมากนัก
โปรโตคอลมีตัวเลือกเยอะ และยากที่จะเข้าใจได้ทันทีว่าแต่ละตัวเลือกทำอะไร ทำไมจึงสำคัญ และควรใช้ร่วมกันแบบไหนจึงจะทำงานตามที่ตั้งใจ เอกสารก็อธิบายส่วนนี้ได้ไม่ดีนัก
บางส่วนอาจเป็นเพราะ Eclipse Mosquitto Python client ที่ใช้ก็ได้ แต่บนระบบที่ช้าเกิด race condition จนการ subscribe topic ถูกเพิกเฉยไปเงียบ ๆ และ callback พัง ต้องใช้เวลาหลายวันกว่าจะหาเจอ
ทั้งที่ทำตามเอกสาร 100% ก็ยังเป็นแบบนั้น และสำหรับโปรโตคอลที่ไม่ได้เก่ามาก นี่เป็นหนึ่งในประสบการณ์ที่เละเทะที่สุด
ประสบการณ์กับ Eclipse clients เช่น Paho ที่เคยใช้ใน Python และ C++ ก็คล้ายกัน คือซับซ้อนเกินไป รู้สึก low-level เกินไป และมีบั๊กอยู่บ้างจากโครงสร้างของมัน
น่าจะเป็นเพราะอยู่ในระดับที่แทบมีคนดูแลหลักเพียงคนเดียว เมื่อเวลาผ่านไปจึงกลายเป็นแบบนี้ C++ client ก็มีผู้ร่วมพัฒนาเพียงคนเดียวในช่วง 6 เดือนล่าสุด และ 3 เดือนล่าสุดไม่มีใคร contribute เลย
PR ง่าย ๆ ที่แก้บั๊กชัดเจน ระดับเปลี่ยนแค่คำเดียว ยังใช้เวลา 2 ปีกว่าจะรีวิวและ merge ได้ ไม่ได้หมายจะตำหนิ แต่หมายความว่าดูเหมือนมีไลบรารี บั๊ก และงานจำนวนมากที่คนกลุ่มเล็ก ๆ ซึ่งทำงานหนักเกินไปต้องรับมือ
พอย้ายไปใช้ client อื่น ประสบการณ์ใน Python, Rust, C#, C++ ดีขึ้นมาก และส่วนใหญ่มีการผสม API ระดับสูง/ต่ำที่ดี ถ้าแค่อยากส่งข้อความไปยัง topic ก็ไม่ต้องสนใจเรื่อง acknowledgement หรือ retry
แต่ถ้าต้องการควบคุมก็ยังควบคุมได้ กังวลว่าการปล่อยให้ paho และตัวอื่น ๆ มีชีวิตอยู่ในสภาพนี้อาจเป็นโทษมากกว่าเป็นประโยชน์หรือไม่ ถ้าประกาศอย่างเป็นทางการว่าตายแล้ว อย่างน้อยปัญหาก็จะถูกบังคับให้เผยออกมา แต่ตอนนี้ผู้ใช้เจอประสบการณ์แบบนี้แล้วเลิกใช้ MQTT หรือคิดว่าตัวเองทำอะไรผิด
ทั้งการออกแบบ API เอกสารที่ขาดแคลน และแนวทางที่ดูเหมือนไม่ตามธรรมเนียมของ Python ล้วนทำให้หงุดหงิด
ตอนเริ่มต้นดูเหมือนง่าย แต่ความกว้างของโปรโตคอลและ implementation ค่อย ๆ กลายเป็นตัวถ่วง ครั้งหนึ่ง วิธีที่เชื่อถือได้ในการตรวจสอบว่าเชื่อมต่อกับเซิร์ฟเวอร์สำเร็จหรือไม่ คือการ subscribe topic เดิมสองครั้ง แล้วจับ error code เฉพาะในข้อความ
on_connectซึ่งตอนนั้น code นั้นถูกระบุในเอกสารว่าเป็น success codeรู้ว่าฟังดูไร้เหตุผล แต่ถึงจะมีวิธีที่ดีกว่า ก็คงหาได้ไม่ง่าย อย่างไรก็ตาม การบ่นเป็นเรื่องง่าย และขอขอบคุณผู้คนมากมายที่สร้างไลบรารีนี้ขึ้นมา ถ้าไม่มีพวกเขา สิ่งที่สร้างอยู่ตอนนี้ก็คงสร้างไม่ได้ และนับถือคนที่รับผิดชอบโปรเจกต์ขนาดใหญ่แบบนี้
ถ้าเป็นไปได้ เลือกให้
mosquitto_subกับmosquitto_pubจัดการโปรโตคอล แล้วอ่านเขียนเฉพาะ standard input/output แทนไม่ใช่แค่เพราะบั๊ก แต่เพราะการฝากการจัดการการเชื่อมต่อกับ broker ให้โปรแกรมที่เขียนและทดสอบมาแล้วทำให้ง่ายกว่า
อย่างไรก็ตาม วิธีนี้ใช้กับ will message ได้ไม่ค่อยมีประสิทธิภาพ และไม่เหมาะกับไมโครคอนโทรลเลอร์ที่ไม่ได้รันอะไรอย่าง Linux
โดยพื้นฐานแล้วมันสร้างระบบ pipe แบบ *nix ผ่านเครือข่ายที่ผ่านการยืนยันตัวตน และมุ่งเป็นวิธีที่ง่ายที่สุดในการส่งและรับ event
สำหรับ use case ของผม คิวแบบไม่จำกัดเป็นเรื่องสำคัญ แต่ MQTT ไม่ได้ให้สิ่งนั้น และถ้าผมต้องจัดการ message ID เอง เพื่อให้ MQTT ติดตาม message ID ของมันเองแล้วส่งไปยัง broker ก็ไม่มีเหตุผลมากนักที่จะใช้
ถ้าไม่ได้เชื่อมต่อกับโปรเจกต์ที่ปรับมาให้เข้ากับ MQTT อยู่แล้ว ก็ไม่ค่อยแน่ใจว่า use case ที่เหมาะที่สุดคืออะไร
ในช่วงไม่กี่ปีมานี้ MQTT ถูกใช้มากขึ้นมากในการแชร์ข้อมูลระหว่างเครื่องจักรภายในโรงงาน
ในอดีตเคยใช้ในภาค Oil & Gas สำหรับงาน SCADA เพื่อดึงข้อมูลจากไซต์บ่อน้ำมันระยะไกล
กว่า 10 ปีก่อนเคยเพิ่ม MQTT เข้าไปใน Kepware (OPC server) เพื่อสตรีมค่าแท็กขึ้น “คลาวด์” หลังจากพรีเซนต์เสร็จ Arlen Nipper หนึ่งในผู้สร้าง MQTT ก็มาหาแล้วบอกว่า “ทำได้ไม่เลว” ทำให้รู้สึกถ่อมตัวขึ้นเลย
ตอนนี้อยู่บริษัทใหม่ชื่อ HighByte ทำการโมเดลข้อมูลโรงงานที่ edge แล้วส่งออกไปทาง MQTT, SparkplugB (โปรโตคอลบน MQTT), S3, Azure Blob ฯลฯ
สรุปคือ MQTT เป็นแรงขับเคลื่อนสำคัญของ Industry 4.0 และมันเจ๋งที่เวลาผ่านมานานแล้วก็ยังถูกใช้อย่างแพร่หลายขนาดนี้
ค่อนข้างดิบ ๆ และมีขั้นตอนประมวลผลมากกว่าที่อยากได้ Kepware คิดค่าไลเซนส์แบบ recurring รายปีสำหรับ IoT plugin เลยตอนนี้กำลังย้ายออกจากโซลูชันนั้น ไปทางให้ telegraf อ่านข้อมูล OPC-UA จาก Kepware โดยตรงแทน
สงสัยว่าเคยทำงานหรือกำลังทำงานที่ Kepware อยู่หรือเปล่า
อยากให้ใช้ Sparkplug B ไปเลย แล้วค่อย implement สเปกสำหรับ semantics ทับบนมัน
แถมงานเกี่ยวกับ asynchronous ที่ทำกันอยู่ตอนนี้ก็ over-engineer มากและแย่มาก เคยเข้าร่วมประชุมอยู่พักหนึ่ง แต่ทั้งที่สเปก MQTT มีไม่ถึง 50 หน้าและอ่านง่าย พวกเขากลับไม่เคยอ่าน และไม่เข้าใจด้วยว่า header มีไว้เพื่ออะไร เช่น พยายามจะใส่สิ่งที่จริง ๆ ควรอยู่ใน payload ลงไปใน header
คนหนึ่งจากฝั่ง Microsoft ถึงกับไม่พอใจข้อเสนอที่ว่าให้ดูก่อนว่าคู่แข่งทำอะไรกับ MQTT อยู่บ้าง เพราะเขาอยากสร้างใหม่มากกว่าลอกเลียน
จากข้อเสนอของผม บริษัทเราจะจัดการ OPC UA เฉพาะที่ edge ชั้นนอกสุดเท่านั้น และจะแยกมันออกจากเทคโนโลยีของเราให้มากที่สุด
แต่ช่วงนี้ก็เห็น Kafka กับ RabbitMQ รุกเข้ามาในพื้นที่ตลาดของ MQTT มากขึ้นเหมือนกัน
ราว 15 ปีก่อน ตอนที่อุปกรณ์ IoT ที่ทวีตได้ยังไม่ใช่เรื่องธรรมดา บ้านของ Andy Stanford Clark เคยเป็นข่าวอยู่พักหนึ่ง
https://www.bbc.co.uk/blogs/technology/2009/06/things_that_t...
โปรโตคอลหลักถูกคิดขึ้นในยุคที่การส่งข้อมูล 1 ไบต์ผ่านลิงก์ดาวเทียมมีค่าใช้จ่าย 1 ดอลลาร์ จึง มีประสิทธิภาพ อย่างไม่น่าเชื่อและ implement ได้ง่ายด้วย
ครั้งหนึ่งในอดีต พอร์ตเดียวที่ใช้ได้ผ่าน firewall ของลูกค้าคือ MQTT 1883 เท่านั้น
เพราะเขารับข้อมูลเซนเซอร์กันแบบนั้น และไม่ว่าจะขอยังไงก็ไม่ยอมเปิดพอร์ตอื่นให้ เลยทำ real-time TCP wrapper บน MQTT เพื่อเลี่ยงข้อจำกัด
TCP daemon แบบ multithread ในเครื่อง local จะฟัง request ขาออกจากพอร์ตหนึ่ง ห่อด้วย MQTT แล้ว publish ไปยัง topic เฉพาะ ส่วน daemon ฝั่งเซิร์ฟเวอร์จะตรวจจับ topic นั้น แกะออก แล้วส่งต่อไปยัง server process
จากมุมมองของเครื่องลูกค้า มันดูเหมือนสร้างการเชื่อมต่อ TCP แบบ real-time ไปยังเซิร์ฟเวอร์ของเรา แต่ตรงกลางมี MQTT wrapper แปลก ๆ ที่มองไม่เห็นคั่นอยู่
พอมันทำงานแล้วก็ดูสง่างามดี แต่การ debug นั้นทรมานจริง ๆ และต้องผ่านทางตันหลายครั้ง กว่าจะประกอบทุกอย่างให้เข้าที่ได้ใช้เวลาหลายเดือน
เดี๋ยวนี้สถานการณ์ที่ทำอะไรไม่ได้ ต้องนั่งว่าง ๆ อยู่เฉย ๆ ถูกเรียกว่า “ปล่อยให้ process ทำงานไป”
เรื่องน่าสนุกคือ Boost ไลบรารี C++ ที่โด่งดังที่สุด กำลังรีวิวว่าจะรวม implementation
async-mqtt5(https://github.com/mireo/async-mqtt5) เป็น Boost.MQTT ในช่วงเวลาเดียวกัน: https://lists.boost.org/Archives/boost/2024/10/index.phpจากประสบการณ์ที่ได้ยินมา การนำมาใช้ส่วนใหญ่อยู่ในยุค 2000s และต้น 2010s มาก ๆ คือก่อนที่ทุกคนจะบังคับใช้ C++0x/C++11 และทุกวันนี้เห็นไม่บ่อยนัก
boost.org เหมือนการเดินทางย้อนเวลา หน้าตายังเหมือนที่จำได้ราวปี 2008 ทุกอย่าง รวมถึงปุ่ม “Get Boost” ที่ทำเป็นภาพตัดต่อบนปุ่มหยุดฉุกเฉินก็ยังอยู่เหมือนเดิม
MQTT เป็นโปรโตคอลเล็ก ๆ ที่ดีจริง ๆ ไม่ใช่แค่ “เล็กพอ” สำหรับใช้กับโปรเจกต์งานอดิเรก แต่ยัง scale ได้พอจะใช้กับของอย่าง Facebook Messenger ด้วย
[1]: https://engineering.fb.com/2011/08/12/android/building-faceb...
การโฆษณาว่า MQTT เบาและมีประสิทธิภาพนั้นไม่ค่อยทำให้ผมคล้อยตามได้
สุดท้ายก็แค่ใช้ TCP/IP เท่านั้น และตามมาตรฐานในยุคนั้นอาจถือว่าพิเศษเมื่อเทียบกัน แต่ผมไม่เคยเห็นหลักฐานจริงที่สนับสนุนคำกล่าวอ้างแบบนั้น นอกจากการอวดซ้ำ ๆ
ข้อดีคือเป็นมาตรฐาน จึงเชื่อมต่อกับอุปกรณ์สำเร็จรูปที่รองรับได้ แต่ผมก็ยังเห็นว่ามีตัวเลือกที่ดีกว่าสำหรับการ publish/subscribe หรือคิวข้อความ โดยเฉพาะถ้าต้องการ failover ฝั่ง consumer
ข้อดีของ MQTT และเป็นจุดที่ implementation แบบ publish/subscribe แทบทั้งหมดที่ผมเคยเห็นทำผิด คือโครงสร้างข้อมูลหลักของ MQTT ไม่ใช่คิวหรือ topic แต่เป็น ไคลเอนต์ที่ subscribe
ดังนั้นจึงสามารถแมปพื้นที่ address space ที่ใหญ่เท่าไรก็ได้ตามต้องการเข้ากับ topic tree ได้ topic tree จะมี endpoint เป็นล้านล้านจุดก็ได้ และถ้าต้องการ แม้แต่บน embedded server ก็สามารถมี endpoint หนึ่งจุดสำหรับทุก IPv6 address ได้
เมื่อ topic tree มีรายละเอียดมาก ก็ทำให้การ subscribe เลือกเฉพาะได้เท่าที่ต้องการ และเซิร์ฟเวอร์ก็ยังทำงานได้เร็วโดยใช้ทรัพยากรน้อย
ใช้ MQTT ในคลาส IoT มาหลายปีแล้ว และพิสูจน์แล้วว่าเป็น เครื่องมือที่ใช้งานได้หลากหลายมาก
การที่รองรับผ่าน WebSocket ด้วยก็สะดวก
ในโปรเจกต์ embedded system ล่าสุด ผมใช้ MQTT เป็น ระบบรับส่งข้อความระหว่างโปรเซส ซึ่งค่อนข้างสนุก
broker กับ client รันอยู่บนเครื่องเดียวกัน
ถ้าต้อง sniff หรือ debug อะไร ก็แค่ต่ออุปกรณ์เข้ากับเครือข่าย แล้วใช้ MQTT Explorer บันทึกหรือ inject ข้อความได้ ง่ายมาก
ยังเปิดพอร์ตออกนอก LAN เพื่อให้เพื่อนร่วมงานที่ทำงานจากระยะไกลเข้ามาจัดการระบบได้ด้วย
สิ่งที่กังวลที่สุดเวลาใช้เป็นส่วนประกอบของระบบคือ การรับประกันความทนทานของข้อมูล และผมไม่ค่อยมั่นใจว่า implementation ของ broker จะไม่ทำข้อมูลหาย