Tiết lộ: Tôi là tác giả của Faye.
- Về Faye, tất cả những gì bạn nói đều đúng.
- 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.
- 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.
- 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.