Faye vs. Socket.IO(和Juggernaut)

Joh*_*hir 102 bayeux publish-subscribe juggernaut websocket socket.io

Socket.IO似乎是最流行和最活跃的WebSocket仿真库.Juggernaut使用它来创建一个完整的pub/sub系统.

Faye也很受欢迎,并拥有自己的javascript库,使其完整的功能可与Juggernaut相媲美.Juggernaut使用节点作为其服务器,而Faye可以使用节点或机架.Juggernaut使用Redis进行持久化(更正:它使用Redis作为pub/sub),而Faye只将状态保存在内存中.

  1. 一切都准确吗?
  2. Faye说它实现了Bayeux - 我认为Juggernaut没有这样做 - 是因为Juggernaut处于较低级别(IE,我可以使用Juggernaut实现Bayeux)
  3. 如果想要,Faye可以切换到使用Socket.IO浏览器javascript库吗?或者他们的javascript库做了根本不同的事情?
  4. 项目之间是否还有其他建筑/设计/哲学差异?

jco*_*lan 121

披露:我是Faye的作者.

  1. 关于王菲,你所说的一切都是真的.
  2. Faye实现了Bayeux的大部分,现在唯一缺少的是服务渠道,我还没有确信它的用处.特别是Faye旨在与Bayeux的CometD参考实现兼容,后者对以下内容有很大的影响.
  3. 从概念上讲,是的:Faye 可以使用Socket.IO.在实践中,存在一些障碍:
    • 我不知道Socket.IO需要什么样的服务器端支持,并且要求Faye客户端(Node和Ruby中有服务器端客户端,请记住)能够与任何Bayeux服务器(以及Faye)通信服务器到任何Bayeux客户端)可能是交易破坏者.
    • Bayeux具有服务器和客户端支持某些传输类型的特定要求,并说明如何协商使用哪种传输类型.它还指定了它们的使用方式,例如XHR请求的Content-Type如何影响其内容的解释方式.
    • 对于某些类型的错误处理,我需要直接访问传输,例如在Node WebSocket死后客户端重新连接时重新发送消息.
    • 如果我有任何错误,请纠正我 - 这是基于对Socket.IO文档的粗略扫描.
  4. Faye只是pub/sub,它只是基于一个稍微复杂的协议,内置了很多细节:
    • 服务器端和客户端扩展
    • 通道路径上的通配符模式匹配
    • 自动重新连接,例如当WebSockets死机或服务器脱机时
    • 客户端适用于所有浏览器,手机和Node和Ruby上的服务器端

与Juggernaut相比,Faye可能看起来要复杂得多,因为Juggernaut代表更多,例如它将传输协商委托给Socket.IO和消息路由到Redis.这些都是很好的决定,但我决定使用Bayeux意味着我必须自己做更多的工作.

至于设计理念,Faye的首要目标是它应该在Web可用的任何地方工作,并且应该是非常简单的.我开始时非常简单,但它的可扩展性意味着它可以以非常强大的方式进行自定义,例如,您可以通过添加身份验证扩展将其转换为服务器到客户端的推送服务(即阻止任意客户端推送到它) .

还有一些工作正在进行,以使其在服务器端更灵活.我正在寻找添加群集支持,并使核心pub-sub引擎可插入,以便您可以使用Faye作为另一个pub-sub系统(如Redis或AMQP)的无状态Web前端.

希望这有用.

  • 我最近从Socket.IO搬到了Faye,我必须说Faye保存了我的申请.使用简单的Faye服务器和中型服务器,我的应用程序可以根据谷歌分析同时处理6000个用户 (4认同)

Ale*_*Caw 13

  1. AFAIK,是的,除了Juggernaut只使用Redis for Pubsub,而不是持久性.也意味着已经编写了大多数语言的客户端库(因为它只需要一个Redis适配器).
  2. Juggernaut没有实现Bayeux,而是有一个非常简单的自定义JSON协议
  3. 可能是敦诺
  4. Juggernaut很简单,设计就是这样.虽然我还没有使用过Faye,但从文档来看,它看起来比PubSub有更多的功能.建立在Socket.IO之上也具有优势,Juggernaut几乎支持所有浏览器,包括桌面和移动.

我真的很感兴趣的是Faye的作者所说的话.就像我说的那样,我没有使用它,知道它与剑圣的比较会很棒.可能就是使用最好的工具来完成这项工作.如果它是你需要的pubsub,Juggernaut做得非常好.