我正在尝试确定服务器与多层系统中各种客户端之间的延迟和带宽。我认为最简单的项目是“良好输出”或有效的应用层速率,但延迟有点难以实现,但更难的是包括“窗口大小”和其他技术因素的真实带宽。 / p>
我正在寻找如何从客户端或服务器角度最准确地计算这个的描述......只要我能够在Azure上运行服务器。
我愿意(但不限于)使用IIS来传输一系列字节,这是一种基于TCP的WCF服务,但解决方案需要基于.NET。
更新
我为这个问题添加了一笔赏金,因为那里有太多的信息......但是很多东西似乎相互冲突,或者缺少数据,特别是在.NET实现中。我最感兴趣的是有2个C#或Silverlight实现。
一些网络大师说我需要考虑TCP窗口大小的“慢启动”。
答案 0 :(得分:0)
您是否尝试过WCF跟踪和消息记录?如果您打开跟踪服务以及客户端上的跟踪消息,则可以打开Service trace viewer中的所有日志并检查所有端到端信息。
答案 1 :(得分: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
答案 2 :(得分:0)
我一直在考虑一种可以在确定延迟方面产生不错结果的技术。
如果客户端和服务器具有非常高精度的同步时钟(针对常见的低延迟源,即:time.nist.gov),只需将服务器上的当前时间戳发送到客户端即可将其本地时间与服务器时间进行比较。时间戳的差异会产生延迟。
这可以与大型“虚拟”文件传输结合使用,以确定持续传输期间和不同网络负载下的延迟。