2010-08-07 110 views
0

我试图确定服务器和多层系统中的各种客户端之间的延迟和带宽。我相信最容易得到的是“输出”或有效的应用层速率,但延迟有点难以实现,但更难的是真正的带宽,包括“窗口大小”和其他技术因素。如何计算网络速度:“goodput”带宽,还是真正的Bandwith?

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

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

UPDATE

我加入悬赏这个问题,因为有这么多的信息在那里......然而很多似乎互相冲突,或有缺失的数据,特别是在.NET实现。我最感兴趣的是有2个实现C#或Silverlight。

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

回答

0

我不想看到一个很好的奖金去浪费,所以我会尝试用我可用的信息来回答我自己的问题。

[延迟]

实际测量(在丝)使用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服务主机,上传和d通过将已知(不可压缩)的一组数据下载到客户端并返回,可以估计下载速度。

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

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

0

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

+0

我的服务器和一个客户端位于Azure中。我想以编程方式从跟踪日志中获取结果,并使用它在运行时调整应用程序行为。我不确定如何在基于此 – LamonteCristo 2010-08-09 21:15:35

+0

的情况下完成此操作。对不起,我对Azure没有任何经验,所以我的回答可能毫无意义。我想你应该用Azure标签来标记这个问题,因为它可能对你的问题的解决方案产生重大影响。 – 2010-08-09 21:42:23

+0

好主意重新:标记;此外,感谢您检查跟踪查看器的提示。我会+1为它的一般乐于助人,它再次回复 – LamonteCristo 2010-08-09 22:13:17

0

我一直在考虑可能产生关于确定延迟拿得出手的成绩了一段时间的技术。

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

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