Faye กับ Socket.IO (และ Juggernaut)


102

ดูเหมือนว่าSocket.IOจะเป็นไลบรารีจำลอง WebSocket ที่ได้รับความนิยมและมีการใช้งานมากที่สุด Juggernautใช้เพื่อสร้างระบบ pub / sub ที่สมบูรณ์

Fayeยังเป็นที่นิยมและใช้งานอยู่และมีไลบรารีจาวาสคริปต์ของตัวเองทำให้ฟังก์ชันการทำงานสมบูรณ์เทียบเท่ากับ Juggernaut Juggernaut ใช้โหนดสำหรับเซิร์ฟเวอร์และ Faye สามารถใช้โหนดหรือแร็คได้ Juggernaut ใช้ Redis เพื่อการคงอยู่ ( การแก้ไข:ใช้ Redis สำหรับ pub / sub) และ Faye จะเก็บสถานะไว้ในหน่วยความจำเท่านั้น

  1. ทุกอย่างข้างต้นถูกต้องหรือไม่?
  2. Faye กล่าวว่ามันใช้Bayeux - ฉันคิดว่า Juggernaut ไม่ทำเช่นนี้ - นั่นเป็นเพราะ Juggernaut อยู่ในระดับต่ำกว่า (IE ฉันสามารถใช้ Bayeux โดยใช้ Juggernaut)
  3. Faye สามารถเปลี่ยนไปใช้ไลบรารีจาวาสคริปต์เบราว์เซอร์ Socket.IO ได้หรือไม่ถ้าต้องการ หรือห้องสมุดจาวาสคริปต์ของพวกเขาทำสิ่งที่แตกต่างกันโดยพื้นฐาน?
  4. มีความแตกต่างทางสถาปัตยกรรม / การออกแบบ / ปรัชญาอื่น ๆ ระหว่างโครงการหรือไม่?

3
ในกรณีนี้ Juggernaut เลิกใช้งานแล้ว! อ่านทำไมblog.alexmaccaw.com/killing-a-library
Maziyar

เหตุการณ์ที่เซิร์ฟเวอร์ส่ง HTML 5 ดูเหมือนจะเป็นทางเลือกที่แนะนำตามผู้เขียน Juggernaut
Harindaka

คำตอบ:


121

การเปิดเผยข้อมูล: ฉันเป็นคนเขียนเฟย์

  1. เกี่ยวกับเฟย์ทุกสิ่งที่คุณพูดเป็นความจริง
  2. Faye ใช้ Bayeux ส่วนใหญ่สิ่งเดียวที่ขาดหายไปในตอนนี้คือช่องทางการให้บริการซึ่งฉันยังไม่มั่นใจในประโยชน์ของมัน โดยเฉพาะอย่างยิ่ง Faye ได้รับการออกแบบมาเพื่อให้เข้ากันได้กับการใช้งานอ้างอิง CometD ของ Bayeux ซึ่งมีแบริ่งขนาดใหญ่ดังต่อไปนี้
  3. ตามแนวคิดใช่: Faye สามารถใช้ Socket.IO ในทางปฏิบัติมีอุปสรรคบางประการดังนี้:
    • ฉันไม่รู้ว่า Socket.IO สนับสนุนฝั่งเซิร์ฟเวอร์ต้องการแบบใดและข้อกำหนดที่ไคลเอนต์ Faye (มีไคลเอนต์ฝั่งเซิร์ฟเวอร์ใน Node และ Ruby จำไว้) สามารถพูดคุยกับเซิร์ฟเวอร์ Bayeux ใด ๆ (และ Faye เซิร์ฟเวอร์ไปยังไคลเอนต์ Bayeux) อาจเป็นตัวทำลายข้อตกลง
    • Bayeux มีข้อกำหนดเฉพาะที่เซิร์ฟเวอร์และไคลเอนต์รองรับการขนส่งบางประเภทและบอกวิธีเจรจาว่าจะใช้แบบใด นอกจากนี้ยังระบุวิธีการใช้งานตัวอย่างเช่นวิธีการที่ประเภทเนื้อหาของคำขอ XHR มีผลต่อวิธีการตีความเนื้อหา
    • สำหรับบางประเภทของการจัดการข้อผิดพลาดที่ฉันต้องการเข้าถึงโดยตรงไปยังการขนส่งเช่นresending ข้อความเมื่อ reconnects ลูกค้าหลังจากการตายโหนด
    • โปรดแก้ไขฉันหากฉันมีข้อผิดพลาดใด ๆ - นี่เป็นไปตามการสแกนคร่าวๆของเอกสาร Socket.IO
  4. Faye เป็นเพียง pub / sub มันขึ้นอยู่กับโปรโตคอลที่ซับซ้อนกว่าเล็กน้อยและมีสิ่งแปลกใหม่มากมายในตัว:
    • ส่วนขยายฝั่งเซิร์ฟเวอร์และไคลเอนต์
    • การจับคู่รูปแบบสัญลักษณ์แทนบนเส้นทางช่อง
    • การเชื่อมต่อใหม่โดยอัตโนมัติเช่นเมื่อ WebSockets ตายหรือเซิร์ฟเวอร์ออฟไลน์
    • ไคลเอนต์ทำงานได้ในทุกเบราว์เซอร์บนโทรศัพท์และฝั่งเซิร์ฟเวอร์บน Node และ Ruby

Faye อาจดูซับซ้อนกว่ามากเมื่อเทียบกับ Juggernaut เนื่องจาก Juggernaut มอบหมายมากกว่าเช่นมอบหมายการเจรจาการขนส่งไปยัง Socket.IO และการกำหนดเส้นทางข้อความไปยัง Redis นี่เป็นการตัดสินใจที่ดีทั้งคู่ แต่การตัดสินใจใช้ Bayeux หมายความว่าฉันต้องทำงานมากขึ้นด้วยตัวเอง

สำหรับปรัชญาการออกแบบเป้าหมายที่เหนือกว่าของ Faye คือควรใช้งานได้ทุกที่ที่มีเว็บให้บริการและควรเป็นเรื่องเล็กน้อยที่จะดำเนินการต่อไป ฉันไม่ง่ายเลยที่จะเริ่มต้น แต่ความสามารถในการขยายหมายความว่าสามารถปรับแต่งได้ในรูปแบบที่มีประสิทธิภาพมากเช่นคุณสามารถเปลี่ยนเป็นบริการพุชเซิร์ฟเวอร์ไปยังไคลเอนต์ (เช่นหยุดไคลเอนต์โดยพลการผลักดันไปที่มัน) โดยการเพิ่มส่วนขยายการตรวจสอบสิทธิ์ .

นอกจากนี้ยังมีการดำเนินการเพื่อให้มีความยืดหยุ่นมากขึ้นในฝั่งเซิร์ฟเวอร์ ฉันกำลังมองหาการเพิ่มการรองรับการทำคลัสเตอร์และทำให้เอ็นจิ้นหลักของ pub-sub สามารถเสียบได้เพื่อให้คุณสามารถใช้ Faye เป็นส่วนหน้าเว็บแบบไร้สถานะสำหรับระบบย่อยอื่น ๆ เช่น Redis หรือ AMQP

ฉันหวังว่านี่จะเป็นประโยชน์


1
ขอบคุณสำหรับคำตอบที่ดี ฉันไม่ได้ตระหนักถึงความยืดหยุ่นของโปรโตคอล Bayeux ดังนั้นไคลเอนต์โดยพลการควรสามารถพูดคุยกับเซิร์ฟเวอร์โดยพลการ / หลายเซิร์ฟเวอร์ได้หรือไม่? คุณรู้จักโครงการหรือบริการด้านการผลิตที่ใช้ประโยชน์จากสิ่งนี้อย่างเต็มที่หรือไม่?
John Bachir

4
ฉันเพิ่งย้ายจาก Socket.IO ไปเป็น Faye และฉันต้องบอกว่า Faye บันทึกแอปพลิเคชันของฉัน ด้วยเซิร์ฟเวอร์ Faye ที่เรียบง่ายและเซิร์ฟเวอร์ขนาดกลางแอปพลิเคชันของฉันสามารถรองรับผู้ใช้ 6000 คนพร้อมกันตามการวิเคราะห์ของ Google
Tan Nguyen

13
  1. AFAIK ใช่นอกเหนือจากข้อเท็จจริงที่ว่า Juggernaut ใช้ Redis สำหรับ Pubsub เท่านั้นไม่ใช่การคงอยู่ ยังหมายความว่าไลบรารีไคลเอ็นต์ในภาษาส่วนใหญ่ได้รับการเขียนแล้ว (เนื่องจากต้องใช้อะแดปเตอร์ Redis)
  2. Juggernaut ไม่ได้ใช้ Bayeux แต่มีโปรโตคอล JSON แบบกำหนดเองที่เรียบง่ายมาก
  3. Dunno อาจจะ
  4. Juggernaut นั้นเรียบง่ายมากและออกแบบมาให้เป็นแบบนั้น แม้ว่าฉันจะไม่ได้ใช้ Faye แต่จากเอกสารดูเหมือนว่ามันมีคุณสมบัติมากกว่า PubSub การสร้างขึ้นที่ด้านบนของ Socket.IO ก็มีข้อดีเช่นกัน Juggernaut รองรับในแทบทุกเบราว์เซอร์ทั้งเดสก์ท็อปและมือถือ

ฉันจะสนใจในสิ่งที่ผู้เขียนของ Faye พูดจริงๆ อย่างที่ฉันบอกว่าฉันไม่ได้ใช้มันและมันจะดีมากที่ได้รู้ว่ามันเปรียบเทียบกับ Juggernaut อย่างไร อาจเป็นกรณีของการใช้เครื่องมือที่ดีที่สุดสำหรับงาน หากคุณต้องการ pubsub Juggernaut ก็ทำได้ดีมาก


ขอบคุณสำหรับคำตอบที่ดี ฉันไม่ทราบว่า Redis ใช้สำหรับคุณลักษณะ pub / sub เท่านั้น ทำให้ฉันถามสิ่งนี้stackoverflow.com/questions/4938520
John Bachir

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