潜在客户和实际客户总是问我这个问题:我可以同时运行多少个流?
我总是解释说maxServerUpstreamBandwidth / (streamDownstreamBandwidth * numberOfStreams)
从理论上来说。事实上,这个数字可能会更少。
然而,在现实世界中,情况似乎有所不同;我们似乎正在比理论上可能的更多的客户。
例如,如果我将 1 兆比特每秒的流发布到具有 100 兆比特每秒线路的服务器,理论上,我应该能够让 100 个客户端以每秒 1 兆比特的速度观看该流。这太疯狂了,1 个服务器只为 100 个客户端提供服务!?!?因此我得出结论,我一定是算错了。
我在这里遗漏了什么?
答案1
我认为有三个因素可以让你传输比理论值更多的数据流:
- 流式传输的数据比您想象的要少。流通常由压缩数据组成,有些数据压缩程度比其他数据高。因此,当您说它是 1 兆比特流时,这可能是最坏情况下的压缩(或者您的 1 兆比特数据未压缩?)。这自然会是突发的,因为数据流会随时间变化,压缩率也会变化。其他因素(例如暂停流)也会降低实际速率。
- 客户端有瓶颈。即使您的服务器有 100 兆比特的线路,客户端的互联网连接也可能很慢(例如咖啡店的共享 Wi-Fi 连接)。
- 自动节流协议。我不知道您的设置,但许多流媒体协议会在带宽受限时自动调整流速率。因此,(使用您的示例)即使您只能以 1 兆比特处理 100 个流,系统也可以处理更多客户端,因为当连接 20 个客户端时,它会自动降至 0.5 兆比特。
这个答案对你的数学没有帮助(没有确切的数字!),但它可能是向你的客户描述情况时的弹药。
答案2
认为每个人都一直以最大速度运行,而如果另一个用户想要打开流,服务器不允许,这种想法似乎很愚蠢。这只会减慢每个人的速度,从而产生新的带宽。
答案3
您还需要处理同一管道上的开销和其他竞争协议和流。
在您的理论示例中,您面对的是一个完美的环境,其中根本没有其他请求使用该 100Mbps 管道。在实际操作中,您永远不会遇到这种情况。该 100Mbps 连接托管着这 100 台客户端计算机之间的各种聊天协议。