Websocket Faye vs.Socket.IO(和Juggernaut)

Websocket Faye vs.Socket.IO(和Juggernaut),websocket,publish-subscribe,juggernaut,bayeux,socket.io,Websocket,Publish Subscribe,Juggernaut,Bayeux,Socket.io,似乎是最流行和最活跃的WebSocket仿真库。使用它创建完整的发布/订阅系统 它也很流行和活跃,并且有自己的javascript库,使其完整的功能与Juggernaut相当。Juggernaut使用节点作为服务器,Faye可以使用节点或机架。Juggernaut使用Redis进行持久化(更正:它使用Redis进行发布/订阅),Faye只在内存中保存状态 以上一切都准确吗 Faye说它实现了——我认为Juggernaut没有做到这一点——是因为Juggernaut是较低级别的(即,我可以使用Ju

似乎是最流行和最活跃的WebSocket仿真库。使用它创建完整的发布/订阅系统

它也很流行和活跃,并且有自己的javascript库,使其完整的功能与Juggernaut相当。Juggernaut使用节点作为服务器,Faye可以使用节点或机架。Juggernaut使用Redis进行持久化(更正:它使用Redis进行发布/订阅),Faye只在内存中保存状态

  • 以上一切都准确吗
  • Faye说它实现了——我认为Juggernaut没有做到这一点——是因为Juggernaut是较低级别的(即,我可以使用Juggernaut实现Bayeux)
  • 如果Faye想使用Socket.IO浏览器javascript库,它是否可以切换到使用该库?或者他们的javascript库做了根本不同的事情
  • 项目之间是否存在其他建筑/设计/理念差异
  • 费伊当然可以。 Socket.IO上类似项目的另一个示例:

  • 好吧,是的,除了Juggernaut只将Redis用于Pubsub,而不是持久性之外。这也意味着大多数语言中的客户端库已经编写好了(因为它只需要一个Redis适配器)
  • Juggernaut没有实现Bayeux,而是有一个非常简单的自定义JSON协议
  • 我不知道,但可能吧
  • Juggernaut非常简单,就是这样设计的。虽然我没有用过Faye,但从文档上看,它的功能远不止PubSub。构建在Socket.IO之上也有它的优点,Juggernaut在几乎所有浏览器中都受支持,包括桌面和移动设备
  • 我对费伊的作者说的话很感兴趣。正如我所说,我还没有使用过它,如果能知道它与Juggernaut相比有什么不同,那就太好了。这可能是使用最好的工具来完成工作的情况。如果你需要的是pubsub,Juggernaut做得很好。

    披露:我是Faye的作者

  • 关于费伊,你说的都是真的
  • Faye实现了Bayeux的大部分功能,现在唯一缺少的就是服务通道,我还没有确信它的有用性。特别是Faye被设计为与Bayeux的CometD参考实现兼容,这对以下方面有很大影响
  • 从概念上讲,是的:Faye可以使用Socket.IO。在实践中,存在一些障碍:
    • 我不知道Socket.IO需要什么样的服务器端支持,Faye客户端(记住,Node和Ruby中都有服务器端客户端)能够与任何Bayeux服务器(以及Faye服务器与任何Bayeux客户端)通信的要求可能会打破交易
    • Bayeux对服务器和客户端支持某些传输类型有特定的要求,并说明了如何协商使用哪种传输类型。它还指定如何使用它们,例如XHR请求的内容类型如何影响其内容的解释方式
    • 例如,对于某些类型的错误处理,我需要直接访问传输
    • 如果我有任何错误,请纠正我-这是基于对Socket.IO文档的粗略扫描
  • Faye只是一个酒吧/酒吧,它只是基于一个稍微复杂一点的协议,内置了很多细节:
    • 服务器端和客户端扩展
    • 通道路由上的通配符模式匹配
    • 自动重新连接,例如当WebSocket死亡或服务器脱机时
    • 客户端可以在所有浏览器、手机上工作,服务器端可以在Node和Ruby上工作
  • 与Juggernaut相比,Faye可能看起来要复杂得多,因为Juggernaut代表更多,例如,它将传输协商委托给Socket.IO,将消息路由委托给Redis。这些都是很好的决定,但我决定使用Bayeux意味着我必须自己做更多的工作

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

    在服务器端,也正在进行使其更加灵活的工作。我正在考虑添加集群支持,并使核心发布子引擎可插拔,以便您可以使用Faye作为另一个发布子系统(如Redis或AMQP)的无状态web前端


    我希望这对您有所帮助。

    谢谢您的回答。我没有意识到Redis只用于其pub/sub功能。让我问:谢谢你的回答。我没有意识到Bayeux协议的灵活性——所以任意客户端应该能够与任意/多个服务器通信?你知道有任何项目或生产服务充分利用了这一点吗?我最近从Socket.IO搬到了Faye,我必须说Faye保存了我的应用程序。有了一个简单的Faye服务器和一个中型服务器,根据google Analytics,我的应用程序可以同时处理6000个用户,以防Juggernaut被弃用!阅读为什么.HTML5服务器发送的事件似乎是推荐的替代方案