Node.js websocket实现的性能比较

Node.js websocket实现的性能比较,node.js,performance,websocket,Node.js,Performance,Websocket,编辑:为了避免结束这个问题,我将把它缩小到基本问题 有人可以在下面列出的两个websocket实现之间共享以MB/s为单位的性能测试吗?应用程序或硬件细节无关紧要,对于一个简单的通用场景,只需两个粗略的数字就足够了 原始问题 有人测试过node.js的这两个websocket实现的性能吗 我找不到任何最新的东西(只有一堆2012-2013年的文章)。我想看到的是: 开销(如果有的话,考虑到实际网络延迟更相关,我想它们都收敛到0) 吞吐量(对于相同的应用程序/硬件,一个简单的MB/S数

编辑:为了避免结束这个问题,我将把它缩小到基本问题

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


原始问题

有人测试过node.js的这两个websocket实现的性能吗

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

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

  • 有无Nagle算法的比较
  • JSON与二进制消息的比较

编辑:更新了有关更新、更快实施的信息

我将尼克·纽曼(NiCk Newman)2016年6月17日20:08的评论整合到这里,以避免它以任何方式丢失

一个更新更快的WebSocket实现是。一些开发人员报告了有希望的结果。对于简单的案例来说,这几乎是不需要动脑筋的。因此,以下讨论在某种程度上被取代


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

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

这一页是最新的。是的,这很简单,但不知怎的它被掩埋了

以下是相关结果:

在我的例子中,我想发送4-16KB的JSON消息(即使4KB也有点夸张,大多数消息也只有100-200个字符)。第一个图表显示,对于64KB的内存,根本没有明显的差异。只有对于较大的消息(大约16MB),ws比websocket节点的速度越来越明显

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

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

  • 对于非碎片文本消息(高达16MB),性能相同
  • 非分段二进制消息的性能相同(无大小限制)

  • 为什么不在本地运行各种测试并找出答案?@mscdex是的,这正是我想要的:如果有人已经这样做了,并且可以与社区共享。服务器端webSocket在已经连接的webSocket连接上发送数据,这些连接在TCP套接字上运行。短语“广播”可能意味着向当前具有连接webSocket的多个端点发送特定数据段。无法在当前连接的webSocket连接之外进行广播。嗯,您知道测试完成时服务器的规格是什么吗?真有趣!我找不到关于规格的任何信息,但我想这只是一个粗略的比较。所有实现都应该从更好的硬件/本机平台实现中以类似的方式受益。在真实场景中,精确的测量会有如此多的活动部件,因此合成基准可能更有用。我希望看到在1 nodejs服务器上进行
    ws
    测试,测量并发性(100多个玩家连接,来回发送数据包),并看看哪种服务器能够处理这一问题。我也是:)据我所知,对于高频消息,应该避免JSON解析/字符串化。最好使用固定大小的64KB字节数组,将所有数据批处理到一个二进制块中。低频消息(每4-5秒不到一次)只要不太大(小于16KB),仍然可以通过JSON传递。不要看这些数字,它们是胡乱猜测,但要理解如何优化网络代码的原因。那么可以支持多少玩家?我不知道,只有在AWS或其他云提供商上的真实测量才能知道。我昨天发现了一个非常有用的方法,它也与此吻合。大约1300个并发用户,每个实例发送/接收消息。这是我能找到的最接近和最真实的数据,如果你能找到其他数据,请告诉我。对于第一个基准测试,我只是不知道EC2上的服务器规格是什么。