Faye与Socket.IO(以及Juggernaut)

Socket.IO似乎是最stream行和最活跃的WebSocket仿真库。 剑圣使用它来创build一个完整的pub / sub系统。

Faye也很受欢迎,并且拥有自己的JavaScript库,使其function堪比Juggernaut。 Juggernaut使用节点作为其服务器,而Faye可以使用节点或机架。 Juggernaut使用Redis进行持久化( 更正:它使用Redis作为pub / sub),而Faye只在内存中保持状态。

  1. 一切准确吗?
  2. 菲耶说它实现了巴约 – 我认为剑圣不这样做 – 是因为剑圣是低级(IE,我可以用剑圣实现巴约)
  3. 如果想要,Faye可以切换到使用Socket.IO浏览器的JavaScript库吗? 或者做他们的JavaScript库做根本不同的事情?
  4. 项目之间还有其他的build筑/devise/哲学差异吗?

披露:我是Faye的作者。

  1. 关于王菲,你所说的一切都是真实的。
  2. Faye实现了大部分的Bayeux,现在唯一缺less的是服务渠道,我还没有确信它的实用性。 特别是Faye被devise成与Bayeux的CometD参考实现兼容,后者对以下方面有很大的影响。
  3. 从概念上来说,是的:Faye 可以使用Socket.IO。 实际上,这有一些障碍:
    • 我不知道Socket.IO需要什么样的服务器端支持,并且要求Faye客户端(在Node和Ruby中有服务器端客户端,记得)能够与任何Bayeux服务器(和Faye服务器到任何Bayeux客户端)可能会被打断。
    • Bayeux有特定的要求,服务器和客户端支持某些传输types,并说如何协商使用哪一种传输types。 它还指定如何使用它们,例如XHR请求的内容types如何影响其内容的解释方式。
    • 对于某些types的error handling,我需要直接访问传输,例如,在Node WebSocket死后客户端重新连接时重新发送消息 。
    • 如果我有任何错误,请纠正我的错误 – 这是基于对Socket.IO文档的粗略扫描。
  4. Faye只是pub / sub,它只是build立在一个稍微复杂一些的协议上,并且内置了很多细节:
    • 服务器端和客户端扩展
    • 通道路由上的通配符模式匹配
    • 自动重新连接,例如,当WebSockets死亡或服务器脱机时
    • 客户端可以在所有浏览器,手机和服务器端在Node和Ruby上运行

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

至于devise理念,Faye的首要目标是它应该在任何可以使用Web的地方工作,并且应该是绝对平凡的。 我很简单,但是它的可扩展性意味着它可以用很强大的方式进行定制,例如,你可以通过添加authentication扩展将它变成一个服务器到客户端的推送服务(即停止任意客户端推送服务) 。

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

我希望这是有帮助的。

  1. AFAIK,是的,除了Juggernaut只使用Redis的Pubsub而不是持久性。 也意味着大多数语言的客户端库已经被写入(因为它只需要一个Redis适配器)。
  2. Juggernaut没有实现Bayeux,而是有一个非常简单的自定义JSON协议
  3. 不知道,可能
  4. 剑圣很简单,就是这样devise的。 尽pipe我没有使用过Faye,但是从文档看来,它比PubSub有更多的function。 build立在Socket.IO之上也有其优势,Juggernaut在几乎所有的浏览器上都支持桌面和移动。

我会对Faye的作者有什么要说的。 正如我所说,我没有使用它,这将是很好的知道它如何比较剑圣。 这可能是使用最好的工具工作的情况。 如果你需要的是pubsub,Juggernaut就可以做得很好。

菲伊当然可以。 在Socket.IO之上的另一个类似项目的例子:

https://github.com/aaronblohowiak/Push-It