高速公路VS Einaros – 节点JS的Websockets

我需要编写一个WebSocket服务器,并通过阅读我购买的书籍来学习Node JS。 这个服务器是一个非常快的游戏,所以我需要尽可能快地将小消息stream到客户组。

有什么区别:

高速公路| JS: http : //autobahn.ws/js/

Einaros: https : //github.com/einaros/ws

我听说高速公路非常强大,能够在没有负载平衡器的情况下处理200k客户端,所以我想知道是否有更多经验的人可以告诉我在select一个或另一个库时是否有优势。

function区别是:Einaros是一个WebSocket库,而Autobahn提供WebSocket实现(例如AutobahnPython ),再加上WebSocket的WAMP。

WAMP为应用程序提供更高层次的通信(RPC + PubSub – 请参阅WAMP网站)。 而AutobahnJS是WebSocket上的浏览器(和NodeJS)的WAMP实现。

现在,说你不关心WAMP,因此只需要一个原始的WebSocket服务器。 然后,您可以将AutobahnPython与Einaros进行比较,主要基于非function特性,如协议遵从性,安全性和性能。

高速公路拥有一stream的协议合规性。 我敢说,因为高速公路项目也提供了准行业标准的WebSocket testing套件 – 大部分项目都使用 – 包括Einaros。 高速公路在所有testing中都有100%的严格通行证。 Einaros也可能 – 我不知道。

性能:是的,一个基于AutobahnPython的WebSocket服务器(4GB RAM,2个内核,PyPy,VirtualBox虚拟机中的FreeBSD)可以处理200k个连接的客户端。 为了给你更多的数据点:这里是一个在RaspberryPi上的性能基准的post 。

特别是,这篇文章强调了最重要的(海事组织)指标:95%/ 99%分位数邮件延迟。 你不应该只看平均延迟,因为可能会有大的偏差和大量的exception值。 你想要的是一致的低延迟。

实现一致的低延迟是不平凡的。 例如像NodeJS或PyPy (JITted Python实现)的语言/运行时间的一个因素就是垃圾收集器。 每次GC运行时,都会减慢速度 – 可能在消息传递中引入大量的延迟。 我已经做了广泛的基准testing(未发表),这表明PyPy的增量GC在这方面是非常好的。 比HotSpot(JVM)和NodeJS(Google V8)更好。 如果有疑问,而且由于我还没有公布数字,你不应该相信我,而是要衡量你自己。

我强烈build议的一件事:不要依赖平均延迟,测量分位数,直方图。

披露:我是Autobahn的原作者,为Tavendo工作。