2011-02-04 38 views
98

Socket.IO có vẻ là thư viện mô phỏng WebSocket phổ biến nhất và đang hoạt động. Juggernaut sử dụng nó để tạo ra một hệ thống pub/sub hoàn chỉnh.Faye vs. Socket.IO (và Juggernaut)

Faye cũng phổ biến và đang hoạt động và có thư viện javascript riêng, làm cho chức năng hoàn chỉnh của nó có thể so sánh với Juggernaut. Juggernaut sử dụng nút cho máy chủ của nó và Faye có thể sử dụng nút hoặc giá. Juggernaut sử dụng Redis cho sự kiên trì (sửa đổi : nó sử dụng Redis cho pub/sub) và Faye chỉ giữ trạng thái trong bộ nhớ.

  1. Mọi thứ ở trên có chính xác không?
  2. Faye nói nó thực hiện Bayeux - tôi nghĩ rằng Juggernaut không làm điều này - là vì Juggernaut là cấp dưới (IE, tôi có thể thực hiện Bayeux sử dụng Juggernaut)
  3. Could Faye chuyển sang sử dụng trình duyệt Socket.IO javascript thư viện nếu nó muốn? Hoặc làm thư viện javascript của họ làm những điều cơ bản khác nhau?
  4. Có sự khác biệt về kiến ​​trúc/thiết kế/triết lý nào giữa các dự án không?
+3

Chỉ trong trường hợp, Juggernaut đã không được chấp nhận! Đọc tại sao http://blog.alexmaccaw.com/killing-a-library. – Maziyar

+0

HTML 5 Sự kiện máy chủ được gửi dường như là sự thay thế được đề xuất theo tác giả Juggernaut – Harindaka

Trả lời

117

Tiết lộ: Tôi là tác giả của Faye.

  1. Về Faye, mọi thứ bạn nói đều đúng.
  2. Faye thực hiện hầu hết Bayeux, điều duy nhất còn thiếu hiện nay là các kênh dịch vụ, mà tôi chưa được thuyết phục về tính hữu ích của. Đặc biệt, Faye được thiết kế để tương thích với việc thực hiện tham chiếu CometD của Bayeux, trong đó có một sức chịu đựng lớn về sau.
  3. Khái niệm, có: Faye có thể sử dụng Socket.IO. Trong thực tế, có một số rào cản đối với điều này:
    • Tôi không biết loại Socket hỗ trợ phía máy chủ nào.IO yêu cầu, và yêu cầu rằng máy khách Faye (có các máy khách phía máy chủ trong Node và Ruby, hãy nhớ) có thể nói chuyện với bất kỳ máy chủ Bayeux nào (và máy chủ Faye cho bất kỳ máy khách Bayeux nào) có thể là bộ ngắt kết nối.
    • Bayeux có các yêu cầu cụ thể mà máy chủ và khách hàng hỗ trợ một số loại phương tiện nhất định và nói cách thương lượng sử dụng loại phương tiện nào. Nó cũng chỉ định cách chúng được sử dụng, ví dụ cách Content-Type của một yêu cầu XHR ảnh hưởng đến cách nội dung của nó được diễn giải như thế nào.
    • Đối với một số loại xử lý lỗi, tôi cần truy cập trực tiếp vào phương tiện, ví dụ resending messages when a client reconnects after a Node WebSocket dies.
    • Hãy sửa tôi nếu tôi có bất kỳ sai sót nào - điều này được dựa trên việc quét lướt qua tài liệu về Socket.IO.
  4. Faye chỉ là pub/sub, nó chỉ dựa trên một giao thức hơi phức tạp hơn và có rất nhiều niceties xây dựng trong:
    • Server-và client-side mở rộng
    • Wildcard mô hình khớp trên các tuyến kênh
    • Tự động kết nối lại, ví dụ: khi WebSockets chết hoặc máy chủ đi ẩn
    • Các khách hàng làm việc trong tất cả các trình duyệt, trên điện thoại và server-side trên Node và Ruby

Faye lẽ trông rất phức tạp hơn so với Juggernaut vì Juggernaut đại biểu nhiều hơn, ví dụ nó ủy thác thương lượng vận chuyển đến Socket.IO và định tuyến thư tới Redis. Đây là cả hai quyết định tốt, nhưng quyết định của tôi để sử dụng Bayeux có nghĩa là tôi phải tự làm nhiều việc hơn.

Đối với triết lý thiết kế, mục tiêu quan trọng của Faye là nó sẽ hoạt động ở mọi nơi trên Web và có thể hoàn toàn tầm thường để bắt đầu. Tôi thực sự đơn giản để bắt đầu nhưng khả năng mở rộng của nó có nghĩa là nó có thể được tùy chỉnh theo những cách khá mạnh mẽ, ví dụ bạn có thể biến nó thành dịch vụ push từ máy chủ đến máy khách (tức là dừng máy khách tùy ý) bằng cách thêm phần mở rộng xác thực .

Ngoài ra còn có công việc đang được tiến hành để làm cho nó linh hoạt hơn ở phía máy chủ. Tôi đang xem xét thêm hỗ trợ phân cụm và làm cho trình cắm thêm công cụ phụ pub-sub cốt lõi để bạn có thể sử dụng Faye làm giao diện web không trạng thái cho một hệ thống pub-sub khác như Redis hoặc AMQP.

Tôi hy vọng điều này hữu ích.

+1

Cảm ơn câu trả lời tuyệt vời. Tôi đã không nhận ra sự linh hoạt của giao thức Bayeux - vì vậy một khách hàng tùy ý có thể nói chuyện với các máy chủ tùy ý/nhiều máy chủ? Bạn có biết bất kỳ dự án hoặc dịch vụ sản xuất nào tận dụng triệt để điều này không? –

+4

Gần đây tôi đã chuyển từ Socket.IO sang Faye, và tôi phải nói rằng Faye đã lưu ứng dụng của tôi. Với một máy chủ Faye đơn giản và một máy chủ trung bình, ứng dụng của tôi có thể xử lý 6000 người dùng cùng một lúc theo google analytics –

13
  1. AFAIK, vâng, ngoài thực tế Juggernaut chỉ sử dụng Redis cho PubSub, không kiên trì. Cũng có nghĩa là thư viện khách hàng trong hầu hết các ngôn ngữ đã được viết (vì nó chỉ cần một bộ điều hợp Redis).
  2. Juggernaut không thực hiện Bayeux, nhưng thay vì có một phong tục rất đơn giản JSON giao thức
  3. Dunno, có lẽ
  4. Juggernaut là rất đơn giản, và được thiết kế theo cách đó. Mặc dù tôi đã không sử dụng Faye, từ các tài liệu có vẻ như nó có nhiều tính năng hơn so với PubSub. Được xây dựng trên đầu trang của Socket.IO có lợi thế quá, Juggernaut được hỗ trợ trong thực tế mọi trình duyệt, cả máy tính để bàn và thiết bị di động.

Tôi sẽ thực sự quan tâm đến những gì tác giả của Faye nói. Như tôi đã nói, tôi đã không sử dụng nó và nó sẽ là tuyệt vời để biết làm thế nào nó so sánh với Juggernaut. Đó có thể là trường hợp sử dụng công cụ tốt nhất cho công việc. Nếu đó là pubsub bạn cần, Juggernaut làm điều đó rất tốt.

+0

Cảm ơn bạn đã trả lời rất hay. Tôi đã không nhận ra rằng Redis chỉ được sử dụng cho các tính năng pub/sub của nó. Làm cho tôi hỏi điều này: http://stackoverflow.com/questions/4938520 –