Xmpp Vs Websocket [ปิดแล้ว]


88

ฉันกำลังจะพัฒนาเว็บไซต์ที่มีการแชทแบบเรียลไทม์ ฉันรู้ว่าสามารถใช้งานได้โดยใช้โปรโตคอล xmpp หรือ websocket ฉันรู้ด้วยว่าโปรโตคอล xmpp ได้รับการพัฒนาในปี 2542 และฉันคิดว่ามันน่าจะเป็นผู้ใหญ่แล้วในทางกลับกันโปรโตคอล websocket ได้รับการพัฒนาในปี 2554

  1. websocket จำเป็นต้องมีอะไรบ้างถ้า xmpp จัดการการสนทนาแบบเรียลไทม์ได้ดี?
  2. อะไรคือความแตกต่างที่สำคัญระหว่าง 2 โปรโตคอล?
  3. และเมื่อไหร่ที่ฉันควรเลือกหนึ่งในนั้น?

1
เมื่อเร็ว ๆ นี้ฉันเจอปัญหาเดียวกันคำตอบของฉันคือไปที่ WebSockets Node.JS กำลังเป็นภาษาที่ได้รับความนิยมอย่างมากและตามสิทธิ์ที่ควรจะเป็น XMPP ก็โอเค - อย่างไรก็ตามในความคิดของฉันคุณกำลัง จำกัด ตัวเองในการก้าวไปข้างหน้าด้วยการตัดสินใจเลือกใช้เทคโนโลยีที่เก่ากว่านี้ อย่างไรก็ตามโหนดเป็นสัตว์ร้ายที่มีเล่ห์เหลี่ยมและคุณต้องเข้าหามันให้แตกต่างจากที่คุณทำกับ JavaScript หากคุณอดทนมากพอฉันขอแนะนำให้ไปที่ Node ไม่ใช่แค่เพียงเพื่อสิ่งนี้ แต่จะช่วยให้คุณสามารถขยายในด้านอื่น ๆ ได้อย่างสะดวกยิ่งขึ้น
JustSteveKing

7
XMPP เป็นโปรโตคอลการส่งข้อความและการแสดงตนที่ขยายได้ Websocket เป็นโปรโตคอลที่ให้การสื่อสารแบบดูเพล็กซ์เต็มรูปแบบผ่านพอร์ต 80 คุณเปรียบเทียบแอปเปิ้ลกับส้ม
ไหล

17
@ Flow: ฉันอาจจะเปรียบเทียบแอปเปิ้ลกับส้มในความคิดของคุณ แต่สิ่งที่ฉันขอคือสิ่งที่ฉันควรเลือกเมื่อพัฒนาเว็บไซต์ที่ให้ความสามารถในการแชทแบบเรียลไทม์
Khafaga

1
@JustSteveKing ส่วนใหญ่ทำใน XMPP แล้ว แต่คุณต้องจัดการสิ่งเหล่านั้นใน node.js นี่เท่ากับการสร้างล้อใหม่อีกครั้ง
Shahid Karimi

คำตอบ:


133

คำตอบสั้น ๆ คือ 'ทั้งสอง'

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

  1. TCP / IP ซึ่งเป็นสิ่งที่มักใช้บนอินเทอร์เน็ตกับไคลเอนต์เนทีฟบนอุปกรณ์
  2. HTTP (เรียกว่า BOSH) ซึ่งเป็นสิ่งที่ใช้กันทั่วไปเมื่อใช้ XMPP ในเบราว์เซอร์ (เนื่องจาก TCP-IP ไม่พร้อมใช้งานสำหรับแอป Javascript ในเบราว์เซอร์)
  3. Websockets ซึ่งเป็นสิ่งที่ใช้เมื่อทำ XMPP ในเบราว์เซอร์สมัยใหม่

ดังนั้นหากคุณกำลังพัฒนาแอปพลิเคชันแชทในเบราว์เซอร์คุณจะต้องเลือก XMPP เป็นโปรโตคอลของแอปพลิเคชันและคุณจะใช้เว็บซ็อกเก็ต (ในเบราว์เซอร์รุ่นใหม่) หรือ BOSH (ในเบราว์เซอร์รุ่นเก่า) เป็นเครือข่าย หากคุณใช้ไลบรารี XMPP สำหรับ Javascript เช่น Stanza.io ( https://github.com/otalk/stanza.io ) มันจะรองรับทั้งสองอย่างและคุณจะคิดถึง 'XMPP' มากกว่าเลเยอร์การขนส่ง นอกเหนือจากการตั้งค่าเมื่อคุณต้องบอกจุดสิ้นสุดที่จะเชื่อมต่อ

(คุณไม่สามารถใช้ 'เว็บซ็อกเก็ต' สำหรับการแชทได้คุณสามารถใช้ websockets โดยไม่มี XMPP ได้ แต่สิ่งนี้หมายความว่าคุณกำลังสร้างโปรโตคอลชั้นแอปพลิเคชันของคุณเองสำหรับการแชทและอัตราต่อรองที่คุณจะบันทึกไว้ เสียเวลาและปวดหัวมากโดยใช้ประโยชน์จากงานที่เขียนไปแล้วซึ่งมีคุณสมบัติที่เป็นประโยชน์ (ความปลอดภัยข้อมูลประจำตัวความสามารถในการขยาย ฯลฯ ) และมีไลบรารีและเซิร์ฟเวอร์ที่มีอยู่แล้วโดยไปที่ XMPP แทน)


1
สวัสดีขออภัยคำถามที่เกิดขึ้นมาสักพักแล้วฉันแค่สงสัยมันหมายความว่าการขนส่งการโยงก็เหมือนกับ socket.io/strophe.js และ xmpp เป็นเหมือน (openfire / Ejabbered) หรือไม่
John

1
ไม่สิ่งที่คุณตั้งชื่อมีทั้งไลบรารีเทียบกับเซิร์ฟเวอร์
Kev

ข้อมูลเพิ่มเติมเกี่ยวกับเลเยอร์ (รวมถึงการขนส่งเลเยอร์แอปพลิเคชัน): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė

2
คำตอบที่ดีจาก Kev แต่ควรชี้ให้เห็นว่า 1> TCP เป็นของเลเยอร์ 4 - เลเยอร์การขนส่งในขณะที่ทั้ง HTTP และ Websocket อยู่ในเลเยอร์ 7 - เลเยอร์แอปพลิเคชัน
Gob00st

แน่นอน @ Gob00st - ฉันก็สับสนที่นี่เช่นกัน คำตอบจาก Kev นี้กล่าวว่า "ทั้ง" เพราะ"คุณต้องการใช้ WebSockets (ในเบราว์เซอร์ที่ทันสมัย) ... เป็นเครือข่ายการขนส่ง " แต่เราจะปรับให้เข้ากันได้อย่างไรกับข้อเท็จจริงที่ว่า WebSocket (เช่น XMPP และ HTTP) เป็นโปรโตคอลแอปพลิเคชัน ( ไม่ใช่การขนส่ง) ใน OSI เลเยอร์ 7 เหตุใด XMPP จึงไป "อยู่เหนือ" WebSockets ในเบราว์เซอร์สมัยใหม่
Amelio Vazquez-Reina
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.