披露:我是 Faye 的作者。
- 关于Faye,你说的都是真的。
- Faye 实现了 Bayeux 的大部分内容,现在唯一缺少的是服务渠道,我还没有相信它的用处。特别是 Faye 被设计为与 Bayeux 的 CometD 参考实现兼容,这对以下内容有很大影响。
- 从概念上讲,是的:Faye可以使用 Socket.IO。在实践中,这有一些障碍:
- 我不知道 Socket.IO 需要什么样的服务器端支持,以及 Faye 客户端(在 Node 和 Ruby 中有服务器端客户端,记住)能够与任何 Bayeux 服务器(以及 Faye服务器到任何 Bayeux 客户端)可能会破坏交易。
- Bayeux 有服务器和客户端支持某些传输类型的特定要求,并说明如何协商使用哪一种。它还指定了它们的使用方式,例如 XHR 请求的 Content-Type 如何影响其内容的解释方式。
- 对于某些类型的错误处理,我需要直接访问传输,例如在 Node WebSocket dies 后客户端重新连接时重新发送消息。
- 如果我有任何错误,请纠正我 - 这是基于对 Socket.IO 文档的粗略扫描。
- Faye 只是 pub/sub,它只是基于一个稍微复杂的协议,并且内置了很多细节:
- 服务器端和客户端扩展
- 通道路由上的通配符模式匹配
- 自动重新连接,例如当 WebSockets 死掉或服务器离线时
- 客户端适用于所有浏览器、手机以及 Node 和 Ruby 上的服务器端
与 Juggernaut 相比,Faye 可能看起来要复杂得多,因为 Juggernaut 委托更多,例如它将传输协商委托给 Socket.IO 并将消息路由委托给 Redis。这些都是不错的决定,但我决定使用 Bayeux 意味着我必须自己做更多的工作。
至于设计理念,Faye 的首要目标是它应该可以在 Web 可用的任何地方工作,并且应该绝对容易上手。我上手真的很简单,但它的可扩展性意味着它可以通过非常强大的方式进行定制,例如,您可以通过添加身份验证扩展将其变成服务器到客户端的推送服务(即停止任意客户端推送) .
还有一些工作正在进行中,以使其在服务器端更加灵活。我正在考虑添加集群支持,并使核心 pub-sub 引擎可插入,以便您可以将 Faye 用作另一个 pub-sub 系统(如 Redis 或 AMQP)的无状态 Web 前端。
希望这有用。