websocket实现的性能比较



编辑:为了避免结束这个问题,我将把它缩小到最重要的。

有人可以在下面列出的两个websocket实现之间共享MB/s的性能测试吗?应用程序或硬件细节无关紧要,对于一个简单的常见场景,只需两个粗略的数字就足够了。


原始问题

是否有人测试了这两个websocket实现在node.js上的性能?

  • WebSocket-Node
  • ws

我找不到任何最近的(只有一堆2012-2013年的文章)。我想看到的是:

  • 开销(如果有的话,考虑到实际的网络延迟更相关,我猜它们都收敛于0)
  • 吞吐量(对于相同的应用程序/硬件,一个简单的MB/S数据将是伟大的)
  • 可以ws真的在网络级别广播数据(尽管底层TCP?这是可能的吗?)或者它只是一个滥用的方法名称(它实际上在for()循环中向许多客户端发送相同的消息)?

更好:

  • 使用/不使用Nagle算法的比较
  • JSON和二进制消息的比较

EDIT:更新有关更新,更快实现的信息

我在这里整合NiCk Newman's Jun 17 '16 at 20:08评论以避免它以任何方式丢失。

一个更新更快的websockets实现是uWS。一些开发者报告了有希望的结果。对于简单的情况,这几乎是不需要动脑筋的。因此,下面的讨论在某种程度上被取代了。


我想知道为什么没有人能回答这个问题。所以,在我搜索了更多的时间之后,我终于来到了这个页面,这里给出了一些答案。

我把它贴在这里,并回答我自己的问题,以便其他人搜索它会发现它更容易。

页面是ws的基准比较。是的,这很简单,但它不知怎么被隐藏了。

相关结果如下:

在我的情况下,我想发送4-16KB的JSON消息(即使4KB是一个夸张,大多数消息将只有100-200个字符)。第一张图显示,对于64KB的内存,根本没有明显的差异。只有对于更大的消息(大约16MB), ws比websocket-node更快变得越来越明显。

对于二进制消息,两者是相同的(如果不相同)。这让我怀疑他们是否在GitHub上互相借用了代码。这将是很好的,因为两个都是在GitHub上被共享和分叉等等。

下面的图表显示了消息碎片,这与流相关,但我对它不感兴趣。以上内容回答了我的问题:

  1. 对于非碎片文本消息(最多16MB)的性能相同
  2. 对于非碎片二进制消息(没有大小限制)的性能相同

最新更新