我需要编写一个WebSocket服务器,我正在通过阅读我购买的一些书来学习Node JS。此服务器用于非常快速的游戏,因此我需要尽快将小消息流式传输到客户端组。
有什么区别:
高速公路| JS:http://autobahn.ws/js/
和
Einaros:https://github.com/einaros/ws
我听说Autobahn非常强大,能够在没有负载均衡器的情况下处理200k客户端,所以我想知道有经验的人是否可以告诉我选择一个或另一个库是否有任何优势。
答案 0 :(得分:4)
功能差异是:Einaros是一个WebSocket库,而Autobahn提供WebSocket实现(例如AutobahnPython),加上WebSocket上的WAMP。
WAMP为应用程序提供更高级别的通信(RPC + PubSub - 请参阅WAMP网站)。 AutobahnJS是WebSocket 之上的浏览器(和NodeJS)的WAMP实现。
现在,假设你不关心WAMP,因此只需要一个原始的WebSocket服务器。然后,您可以将AutobahnPython与Einaros进行比较,主要基于非功能特性,如协议合规性,安全性和性能。
Autobahn拥有一流的协议合规性。我敢说,因为高速公路项目还提供准行业标准WebSocket testsuite - 大多数项目使用 - 包括Einaros。高速公路在所有测试中都有100%严格的通行证。 Einaros 可能也 - 我不知道。
性能:是的,一个基于AutobahnPython的WebSocket服务器(4GB RAM,2个内核,PyPy,VirtualBox VM中的FreeBSD)可以处理200k个连接的客户端。为您提供更多数据点:这是一个post,其中包含RaspberryPi的性能基准。
特别是,这篇文章重点介绍了最重要的(IMO)指标:95%/ 99%分位数消息传递延迟。你不应该只关注平均延迟,因为可能存在很大的偏差和大量的异常值。你想要的是一致的低延迟。
实现一致的低延迟并非易事。例如。像NodeJS或PyPy(JITted Python实现)这样的语言/运行时的一个因素是垃圾收集器。每次GC运行时,它都会减慢工作量 - 可能会在消息传递中引入大的延迟。我已经做了大量的基准测试(未发表),这表明PyPy的增量GC在这方面非常非常好。比HotSpot(JVM)和NodeJS(谷歌V8)更好。如果有疑问,既然我还没有公布过数字,你就不应该相信我,而是衡量自己。
我强烈建议:不要依赖平均延迟,测量分位数,做直方图。
披露:我是高速公路的原作者,为Tavendo工作。