อะไรคือความแตกต่างระหว่างโปรโตคอล WebSocket และ STOMP?


คำตอบ:


91

คำถามนี้คล้ายกับการถามความแตกต่างระหว่าง TCP และ HTTP ฉันจะยังคงพยายามตอบคำถามของคุณเป็นเรื่องปกติที่จะสับสนระหว่างสองคำนี้หากคุณกำลังเริ่มต้น

คำตอบสั้น ๆ

STOMP มาจากด้านบนของ WebSockets STOMP กล่าวถึงวิธีการเฉพาะบางประการเกี่ยวกับวิธีแลกเปลี่ยนกรอบข้อความระหว่างไคลเอนต์และเซิร์ฟเวอร์โดยใช้ WebSockets


คำตอบยาว

WebSockets

เป็นข้อกำหนดที่อนุญาตให้มีการสื่อสารแบบสองทิศทางแบบซิงโครนัสระหว่างไคลเอนต์และเซิร์ฟเวอร์ แม้ว่าจะคล้ายกับซ็อกเก็ต TCP แต่ก็เป็นโปรโตคอลที่ทำงานเป็นการเชื่อมต่อ HTTP ที่ได้รับการอัปเกรดโดยแลกเปลี่ยนเฟรมที่มีความยาวผันแปรระหว่างสองฝ่ายแทนการสตรีม

เหยียบ

กำหนดโปรโตคอลสำหรับไคลเอนต์และเซิร์ฟเวอร์ในการสื่อสารด้วยอรรถศาสตร์การส่งข้อความ ไม่ได้กำหนดรายละเอียดการใช้งานใด ๆ แต่จะกล่าวถึงโปรโตคอลสายที่ใช้งานง่ายสำหรับการผสานรวมการส่งข้อความ ให้ความหมายที่สูงขึ้นที่ด้านบนของโปรโตคอล WebSockets และกำหนดประเภทเฟรมจำนวนหนึ่งที่แมปลงบนเฟรม WebSockets บางประเภทเหล่านี้คือ ...

  • เชื่อมต่อ
  • ติดตาม
  • ยกเลิกการสมัคร
  • ส่ง (ข้อความที่ส่งไปยังเซิร์ฟเวอร์)
  • ข้อความ (สำหรับข้อความที่ส่งจากเซิร์ฟเวอร์) BEGIN, COMMIT, ROLLBACK (การจัดการธุรกรรม)

คุณหมายถึงอะซิงโครนัสหรือเปล่า
Anatolii Stepaniuk

25

WebSocketหมายถึงสถาปัตยกรรมการส่งข้อความ แต่ไม่ได้กำหนดให้ใช้โปรโตคอลการส่งข้อความใด ๆ เป็นเลเยอร์ที่บางมากบน TCP ที่เปลี่ยนสตรีมไบต์เป็นสตรีมข้อความ (ไม่ว่าจะเป็นข้อความหรือไบนารี) และไม่มากไปกว่านั้น ขึ้นอยู่กับแอพพลิเคชั่นในการแปลความหมายของข้อความ

ซึ่งแตกต่างจาก HTTP ซึ่งเป็นโปรโตคอลระดับแอปพลิเคชันในโปรโตคอล WebSocket มีเพียงข้อมูลไม่เพียงพอในข้อความขาเข้าสำหรับกรอบงานหรือคอนเทนเนอร์ที่จะทราบวิธีกำหนดเส้นทางหรือประมวลผล ดังนั้น WebSocket จึงอยู่ในระดับที่ต่ำเกินไปสำหรับทุกสิ่งยกเว้นแอปพลิเคชันที่ไม่สำคัญมาก สามารถทำได้ แต่จะนำไปสู่การสร้างกรอบด้านบน สิ่งนี้เปรียบได้กับการเขียนเว็บแอปพลิเคชันส่วนใหญ่ในปัจจุบันโดยใช้เว็บเฟรมเวิร์กแทนที่จะใช้ Servlet API เพียงอย่างเดียว

ด้วยเหตุนี้ WebSocket RFC จึงกำหนดการใช้โปรโตคอลย่อย ในระหว่างการจับมือกันไคลเอนต์และเซิร์ฟเวอร์สามารถใช้ส่วนหัว Sec-WebSocket-Protocol เพื่อยอมรับโปรโตคอลย่อยนั่นคือโปรโตคอลระดับแอปพลิเคชันที่สูงกว่าที่จะใช้ ไม่จำเป็นต้องใช้โปรโตคอลย่อย แต่แม้ว่าจะไม่ได้ใช้แอปพลิเคชันก็ยังคงต้องเลือกรูปแบบข้อความที่ทั้งไคลเอนต์และเซิร์ฟเวอร์สามารถเข้าใจได้ รูปแบบนั้นอาจเป็นแบบกำหนดเองเฉพาะเฟรมเวิร์คหรือโปรโตคอลการส่งข้อความมาตรฐาน

STOMP  - โปรโตคอลการส่งข้อความที่เรียบง่ายซึ่งเดิมสร้างขึ้นเพื่อใช้ในภาษาสคริปต์พร้อมเฟรมที่ได้รับแรงบันดาลใจจาก HTTP STOMP ได้รับการสนับสนุนอย่างกว้างขวางและเหมาะอย่างยิ่งสำหรับการใช้งานผ่าน WebSocket และบนเว็บ


13

WebSocket API ช่วยให้เว็บแอปพลิเคชันสามารถจัดการการสื่อสารแบบสองทิศทางได้ในขณะที่ STOMP เป็นโปรโตคอลการส่งข้อความที่เน้นข้อความธรรมดา

โดยทั่วไปจะใช้โปรโตคอล STOMP ภายในเว็บซ็อกเก็ตเมื่อเว็บแอปต้องการรองรับการสื่อสารแบบสองทิศทางกับเว็บเซิร์ฟเวอร์

บทช่วยสอนที่ดีคือSTOMP Over WebSocketโดย Jeff Mesnill (2012)

นอกจากนี้ยังสามารถใช้ STOMP ได้โดยไม่ต้องใช้ websocket เช่นผ่านการเชื่อมต่อ Telnet หรือบริการนายหน้าข้อความ

และ Raw WebSockets สามารถใช้ได้โดยไม่ต้อง STOMP - เช่น ตัวอย่างเช่นในฤดูใบไม้ผลิ Boot + WebSocket โดยไม่ต้อง STOMP และ SockJs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.