Faye so với Socket.IO (và Juggernaut)


102

Socket.IO dường như là thư viện giả lập WebSocket phổ biến và tích cực nhất. Juggernaut sử dụng nó để tạo ra một hệ thống pub / sub hoàn chỉnh.

Faye cũng phổ biến và hoạt động tích cực, 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ự bền bỉ ( sửa: 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 rằng nó triển khai Bayeux - tôi nghĩ Juggernaut không làm được điều này - đó là vì Juggernaut ở cấp thấp hơn (IE, tôi có thể triển khai Bayeux bằng Juggernaut)
  3. Faye có thể chuyển sang sử dụng thư viện javascript của trình duyệt Socket.IO nếu muốn không? Hay các thư viện javascript của họ về cơ bản làm những việc khác nhau?
  4. Có sự khác biệt nào khác về kiến ​​trúc / thiết kế / triết lý giữa các dự án không?

3
Đề phòng, Juggernaut không được dùng nữa! Đọc tại sao blog.alexmaccaw.com/killing-a-library .
Maziyar

HTML 5 sự kiện Server-Sent dường như là đề nghị thay thế theo tác giả Juggernaut
Harindaka

Câu trả lời:


121

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

  1. Về Faye, tất cả những gì bạn nói đều đúng.
  2. Faye triển khai hầu hết Bayeux, điều duy nhất còn thiếu lúc này là các kênh dịch vụ, mà tôi vẫn chưa bị thuyết phục về tính hữu ích của nó. Đặc biệt Faye được thiết kế để tương thích với việc triển khai tham chiếu CometD của Bayeux, có ảnh hưởng lớn về những điều sau đây.
  3. Về mặt khái niệm, có: Faye có thể sử dụng Socket.IO. Trên thực tế, có một số rào cản đối với điều này:
    • Tôi không biết Socket.IO yêu cầu loại hỗ trợ phía máy chủ nào 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à Faye máy chủ cho bất kỳ máy khách Bayeux nào) có thể là người phá vỡ giao dịch.
    • Bayeux có các yêu cầu cụ thể mà máy chủ và máy khách hỗ trợ một số loại truyền tải nhất định và cho biết cách thương lượng loại nào nên sử dụng. Nó cũng chỉ định cách chúng được sử dụng, chẳng hạn như cách Loại-Nội dung của yêu cầu XHR ảnh hưởng đến cách diễn giải nội dung của nó.
    • Đối với một số loại xử lý lỗi, tôi cần quyền truy cập trực tiếp vào quá trình truyền tải, ví dụ: gửi lại thông báo khi máy khách kết nối lại sau khi Node WebSocket chết .
    • Vui lòng sửa cho tôi nếu tôi có bất kỳ sai sót nào - điều này dựa trên bản quét nhanh tài liệu Socket.IO.
  4. Faye chỉ là pub / sub, nó chỉ dựa trên một giao thức phức tạp hơn một chút và có rất nhiều tiện ích được tích hợp sẵn:
    • Tiện ích mở rộng phía máy chủ và phía máy khách
    • Đối sánh mẫu ký tự đại diện 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ủ ngoại tuyến
    • Máy khách hoạt động trên tất cả các trình duyệt, trên điện thoại và phía máy chủ trên Node và Ruby

Faye có lẽ trông phức tạp hơn rất nhiều so với Juggernaut vì Juggernaut ủy quyền nhiều hơn, ví dụ như nó ủy quyền vận chuyển thương lượng tới Socket.IO và định tuyến tin nhắn tới Redis. Đây đều là những quyết định đúng đắn, nhưng quyết định sử dụng Bayeux của tôi có nghĩa là tôi phải tự mình 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ó phải hoạt động ở mọi nơi mà Web có sẵn và phải 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ẽ, chẳng hạn như bạn có thể biến nó thành một dịch vụ đẩy từ máy chủ đến máy khách (tức là ngừng các khách hàng tùy ý đẩy đến nó) bằng cách thêm các tiện ích mở rộng xác thực .

Cũng có nhiều 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 việc bổ sung hỗ trợ phân cụm và làm cho công cụ pub-sub cốt lõi có thể cắm được để 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 đã được hữu ích.


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

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ý đồng thời 6000 người dùng theo google analytics
Tan Nguyen

13
  1. AFAIK, vâng, ngoài thực tế là Juggernaut chỉ sử dụng Redis cho Pubsub chứ không sử dụng lâu dài. Cũng có nghĩa là các thư viện máy khách trong hầu hết các ngôn ngữ đã được viết sẵn (vì nó chỉ cần một bộ điều hợp Redis).
  2. Juggernaut không triển khai Bayeux, mà có một giao thức JSON tùy chỉnh rất đơn giản
  3. Dunno, có lẽ
  4. Juggernaut rất đơn giản và được thiết kế theo cách đó. Mặc dù tôi chưa sử dụng Faye, nhưng từ các tài liệu, có vẻ như nó có nhiều tính năng hơn chỉ PubSub. Được xây dựng trên nền tảng của Socket.IO cũng có lợi thế, Juggernaut được hỗ trợ trên thực tế trên 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ự hứng thú với những gì tác giả của Faye nói. Như tôi đã nói, tôi chưa sử dụng nó và sẽ thật tuyệt nếu biết nó so với Juggernaut như thế nào. Đó có lẽ 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.


Cảm ơn vì một câu trả lời tuyệt vời. Tôi không nhận ra rằng Redis chỉ được sử dụng cho các tính năng quán rượu / phụ của nó. Khiến tôi hỏi điều này: stackoverflow.com/questions/4938520
John Bachir

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.