Faye vs.Socket.IO(和剑圣)


102

Socket.IO似乎是最受欢迎和最活跃的WebSocket仿真库。剑圣使用它来创建一个完整的发布/订阅系统。

Faye也很流行,也很活跃,并且拥有自己的JavaScript库,使其完整功能可与Juggernaut媲美。剑圣使用节点作为其服务器,而Faye可以使用节点或机架。剑圣使用Redis进行持久化(更正:使用Redis进行发布/订阅),Faye仅将状态保留在内存中。

  1. 以上所有内容都准确吗?
  2. Faye表示它实现了Bayeux-我认为Juggernaut不会这样做-是因为Juggernaut的级别较低(即,我可以使用Juggernaut来实现Bayeux)
  3. 如果愿意,Faye是否可以切换到使用Socket.IO浏览器JavaScript库?还是他们的JavaScript库在根本上做不同的事情?
  4. 项目之间是否还有其他建筑/设计/理念差异?

3
以防万一,剑圣已经过时了!了解为什么blog.alexmaccaw.com/killing-a-library
Maziyar

根据《剑圣》作者的说法,HTML 5服务器发送的事件似乎是推荐的替代方法
Harindaka '17

Answers:


121

披露:我是Faye的作者。

  1. 关于Faye,您所说的一切都是真实的。
  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只是发布/订阅,它只是基于稍微复杂一些的协议,并且内置了许多功能:
    • 服务器和客户端扩展
    • 通道路由上的通配符模式匹配
    • 自动重新连接,例如当WebSocket死机或服务器脱机时
    • 客户端可以在所有浏览器,手机以及Node和Ruby的服务器端使用

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

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

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

希望这有用。


1
感谢您的好回答。我没有意识到Bayeux协议的灵活性-因此,任意客户端应该能够与任意/多个服务器通信吗?您是否知道可以充分利用此优势的任何项目或生产服务?
约翰·巴希尔

4
我最近从Socket.IO移到了Faye,我必须说Faye保存了我的应用程序。用一个简单的王菲服务器和媒体服务器,我的应用程序可以处理6000个用户同时根据谷歌分析
谭阮

13
  1. AFAIK,是的,除了Juggernaut仅将Redis用于Pubsub,而不是持久性。这也意味着已经编写了大多数语言的客户端库(因为它只需要一个Redis适配器)。
  2. Juggernaut没有实现Bayeux,而是拥有一个非常简单的自定义JSON协议
  3. 邓诺,可能
  4. 剑圣非常简单,就是这样设计的。尽管我没有使用过Faye,但从文档看来,它具有的功能远不止PubSub。由于建立在Socket.IO之上也具有其优势,Juggernaut几乎在台式机和移动设备的所有浏览器中均受支持。

我将对Faye的作者说的很感兴趣。正如我说的,我还没有使用过它,很高兴知道它与剑圣相比如何。使用最佳工具完成工作可能就是这种情况。如果您需要的是pubsub,那么Juggernaut会做得很好。


感谢您的好回答。我没有意识到Redis仅用于其发布/订阅功能。让我问这个问题:stackoverflow.com/questions/4938520
John Bachir

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.