【问题标题】:How do I calculate network speed: either "goodput" Bandwidth, or real Bandwith?如何计算网络速度:“goodput”带宽还是真实带宽?
【发布时间】:2010-08-07 15:25:14
【问题描述】:

我正在尝试确定多层系统中服务器与各种客户端之间的延迟和带宽。我认为最容易获得的项目是“goodput”或有效应用层速率,但延迟有点难以获得,但更难的是真正的带宽,包括“窗口大小”和其他技术因素。

我正在寻找关于如何从客户端或服务器的角度最准确地计算这一点的描述......只要我能够在 Azure 上运行服务器。

我愿意(但不限于)使用 IIS 流式传输一系列字节,一个基于 TCP 的 WCF 服务,但解决方案需要基于 .NET。

更新

我为这个问题添加了一个赏金,因为那里有很多信息......但很多似乎相互冲突,或者缺少数据,尤其是在 .NET 实现中。我最感兴趣的是拥有 2 个 C# 或 Silverlight 实现。

一些网络专家说我需要考虑 TCP 窗口大小的“慢启动”。

【问题讨论】:

    标签: wcf network-programming azure client-server latency


    【解决方案1】:

    我不想看到一个好的赏金被浪费,所以我会尝试用我现有的信息来回答我自己的问题。

    [延迟]

    无法使用 Silverlight 测量实际(在线)延迟和速度,因为我们无法访问 TCP 套接字,也无法从沙箱访问此类低级接口。这也会杀死“TCP SlowStart”。话虽如此,可以推断出 WCF 延迟和 Goodput 带宽。

    WCF 服务

    2    using System;
    3    using System.Net.NetworkInformation;
    4    using System.Text;
    5    
    6    public class Service : IService
    7    {
    8        public bool PingNetwork()
    9        {
    10           return true;
    11       }
    12   }
    

    和客户端:

       using System;
       using System.Windows;
       using System.Windows.Controls;
       using PingDemo.PingServiceReference;
    
       namespace PingDemo
       {
           public partial class MainPage : UserControl
           {
               private ServiceClient client = new ServiceClient();
               private DateTime PingStart = new DateTime();
    
    
           public MainPage()
           {
               InitializeComponent();
    
               client.PingNetworkCompleted += new EventHandler(client_PingNetworkCompleted);
           }
    
           void client_PingNetworkCompleted(object sender, PingNetworkCompletedEventArgs e)
           {
               if (e.Error == null && e.Cancelled == false)
               {
                   MessageBox.Show("Ping Status: " + e.Result);
               }
           }
    
           private void btnPing_Click(object sender, RoutedEventArgs e)
           {
               if (client == null)
               {
                   client = new ServiceClient();
               }
    
               PingStart = DateTime.UtcNow();
               client.PingNetworkAsync(txtHostIP.Text.Trim());
               TimeSpan Est_RoundTripTime = DateTime - PingStart;  //may need to look up exact syntax
    
           }
       }
    

    }

    [上传下载]

    类似于使用 WCF 服务主机确定延迟的方式,上传和下载速度可以通过将一组已知(不可压缩)数据下载到客户端并返回来估计。

    以下博客讨论了通过 WCF 发送大数据的方法。这可用于计算使用与上述类似的方式发送/传输数据的速度。

    http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html

    【讨论】:

      【解决方案2】:

      一段时间以来,我一直在考虑一种可以在确定延迟方面产生不错结果的技术。

      如果客户端和服务器具有非常高精度的同步时钟(针对常见的低延迟源;即:time.nist.gov),只需将服务器上的当前时间戳发送给客户端即可允许客户端将其本地时间与服务器时间进行比较。时间戳的差异会产生延迟。

      这可以与大型“虚拟”文件传输结合使用,以确定持续传输期间和不同网络负载下的延迟。

      【讨论】:

        【解决方案3】:

        您是否尝试过 WCF 跟踪和消息记录?如果您在服务和客户端上打开跟踪消息记录,您可以打开Service trace viewer 中的所有日志并检查所有端到端信息。

        【讨论】:

        • 我的服务器和一个客户端位于 Azure 中。我想以编程方式从跟踪日志中获取结果,并使用它来调整运行时的应用程序行为。基于此,我不确定如何在我的情况下完成此操作
        • 抱歉,我对 Azure 没有任何经验,所以我的回答可能毫无意义。我想你应该用 Azure 标记来标记这个问题,因为它会对你的问题的解决方案产生很大的影响。
        • 好主意:标记;另外,感谢您提供检查跟踪查看器的提示。我会 +1 因为它的一般帮助它再次回复进来
        • Azure 根本没有改变跟踪。如果需要,您仍然可以在 Windows Azure 中启用 WCF 跟踪(这只是 web.config 中的配置设置问题,Windows Azure 运行完整的 IIS)并监视跟踪文件。
        猜你喜欢
        • 2013-04-06
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2021-07-27
        相关资源
        最近更新 更多