高速公路VS Einaros-使用Node JS的Websockets

Jac*_* M. 1 node.js autobahn

我需要编写一个WebSocket服务器,并且通过阅读购买的书籍来学习Node JS。该服务器用于非常快速的游戏,因此我需要尽快将小消息流式传输到客户端组。

之间有什么区别?

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

埃纳罗斯(Einaros):https : //github.com/einaros/ws

我听说Autobahn非常强大,能够在没有负载均衡器的情况下处理20万个客户端,因此我想知道是否有更多经验的人可以建议我选择一个或另一个库是否有任何优势。

obe*_*tet 5

功能上的区别是:Einaros是一个WebSocket库,而Autobahn提供了WebSocket实现(例如AutobahnPython),以及在WebSocket之上的WAMP。

WAMP为应用程序提供了更高级别的通信(RPC + PubSub-请访问WAMP网站)。AutobahnJS是WebSocket之上的浏览器(和NodeJS)的WAMP实现。

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

高速公路具有一流的协议合规性。我敢说,因为高速公路项目还提供了准工业标准的WebSocket 测试套件 -大多数项目都使用了-包括Einaros。高速公路在所有测试中均100%严格通过。Einaros 也可能 -我不知道。

性能:是的,一个基于AutobahnPython的WebSocket服务器(VirtualBox VM中的4GB RAM,2个内核,PyPy,FreeBSD)可以处理200k个连接的客户端。为您提供更多数据点:这是RaspberryPi上具有性能基准测试的帖子

特别是,这篇文章重点介绍了最重要的(IMO)指标:95%/ 99%的分位数消息传递延迟。您不应该只关注平均延迟,因为可能会有很大的偏差和巨大的离群值。您想要的是一致的低延迟。

实现一致的低延迟并非易事。例如,对于语言/运行时(例如NodeJS 或PyPy(JITted Python实现)),一个因素是垃圾收集器。每次GC运行时,它都会使处理工作变慢-潜在地在消息传递中引入大延迟。我已经进行了广泛的基准测试(未发布),这表明PyPy的增量GC 在这方面非常出色。比HotSpot(JVM)和NodeJS(Google V8)更好。如有疑问,并且由于我尚未(尚未)发布数据,您不应该相信我,而要衡量自己。

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

披露:我是高速公路的原始作者,并且为Tavendo工作。