0

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

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

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

更新

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

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

4

3 回答 3

0

Did you try WCF tracing and message logging? If you turn on tracing ane message logging on the service and also on clients you can open all logs in Service trace viewer and check all end to end information.

于 2010-08-07T21:30:17.673 回答
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 服务主机确定延迟的类似方式,可以通过将已知(不可压缩)数据集下载到客户端并返回来估计上传和下载速度。

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

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

于 2010-08-13T20:57:59.220 回答
0

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

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

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

于 2010-08-13T21:02:19.560 回答