本站木有非理性广告和有害内容,请大度地将本站加入广告屏蔽白名单吧~~~ ::博客文章推荐::

原创FSLib.Network库更新 1.6.0版(目前专注于HTTP的高性能高易用性网络库)

:: 原创作品 木魚 6100℃ 15评论

0.概述

FSLib.Network 是订票助手.NET的一个副产物。开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。

更多介绍和演示,参见 原创FSLib.Network库(目前专注于HTTP的高性能高易用性网络库)

1.1.6.0变更详情(与1.5.6相比)

  • 修正错误的JSON.NET库依赖版本号
  • 上传和下载支持性能计数(平均速度/当前速度/预计剩余时间/已用时间)
  • 请求头原生支持 Origin
  • 修正当上传数据无法计算长度时抛出异常的BUG(改为自动启用缓冲)
  • 文件下载模式支持使用自定义流
  • 修正异步模式下,进度报告错误的BUG
  • 调整了部分的Cookies默认设置(如容量等)
  • 支持无CookiesContainer模式
  • 默认将300以上请求识别为文本模式
  • 修正特定情况下对Cookeis处理模式的设置未能起效的bug
  • 修正特定的URI会导致Refer报错的BUG
  • 修正匿名类型中HttpPostFile文件上传的识别错误
  • 一堆辅助函数,Fluent API设置参数
  • JSON序列化默认使用自动Type处理
注意:本版本包含破坏性变更。HttpClient的两个便捷函数(CreateGetCreatePost)已改名,现在分别为 GetPost

2. 上传下载性能计数(速度)

这个功能是在做短视频下载工具的时候要用的,所以引入了。为了性能考虑,默认是不计算速度的,如果需要计算速度的话,可以在发送请求前手动设置记录速度。

可以使用HttpContextAutoStartSpeedMonitor属性来自动开始计算。

var client = new HttpClient();
var ctx = client.GetData("一个网址...");
ctx.AutoStartSpeedMonitor = true;
ctx.Send();

或者可以使用新增的Fluent API来设置。

var client = new HttpClient();
var ctx = client.GetData("一个网址...").WithSpeedMeter().Send();

这么设置后,相关是速度和时间信息将会在HttpContextPerformance属性中体现。参考下面的演示程序:

var client = new HttpClient();
var ctx = client.Create<ResponseFileContent>(HttpMethod.Get,
					"http://dldir1.qq.com/qqfile/qq/QQ7.9/16638/QQ7.9.exe",
					saveToFile@"G:\QQ.exe"
	);
 
//setup a timer to display
var timer = new System.Timers.Timer(1000);
timer.Elapsed += (se) =>
{
	var perf = ctx.Performance;
	if (perf == null)
		return;
	Console.WriteLine(
			"{0}> 已下载大小:{1}, 总大小:{2}, 已用下载时间 {3}, 当前下载速度 {4}, 平均下载速度 {5}, 预计剩余时间 {6}",
			DateTime.Now.ToString("HH:mm:ss"),
			perf.ResponseLengthProcessed.ToSizeDescription(),
			perf.ResponseLength.ToSizeDescription(),
			perf.ElapsedTime?.ToFriendlyDisplay(),
			perf.InstantDownloadSpeed?.ToSizeDescription(),
			perf.AverageDownloadSpeed?.ToSizeDescription(),
			perf.DownloadResetTime?.ToFriendlyDisplay());
};
 
Console.WriteLine("开始下载....");
 
timer.Start();
ctx.WithSpeedMeter().Send();
timer.Stop();
 
Console.WriteLine("下载完成,状态=" + ctx.IsValid() + ",耗时=" + ctx.Performance.ElapsedTime?.ToFriendlyDisplay());

运行结果如下图所示。

20151213194133

3. 更多信息

更多信息和下载&安装,请参见主页。

官网主页
喜欢 (8)or分享 (0)

您需要 登录 才能发表评论 You need login to post a comment :-)

(15)个小伙伴在吐槽
  1. http://ask.fishlee.net/category-21 里没办法提问啊

    缘木求鱼2016-02-27 09:15
  2. 请问解决了webclient中超时卡死app的问题了吗

    jerry2016-02-02 12:19
    • 超时卡死应该用异步来解决。

      木魚2016-02-02 14:36
      • 我的目的是:从C# Form通过webclienta或者httpclient发送请求到application server,获取数据后再进入后期处理。如果异步,会打乱获取数据的顺序。所以期望:如果请求超时,则重新请求;多次请求仍然获取不了数据,则提示用户退出系统,重新运行。如果网络没问题,重新运行肯定会成功获取数据。

        Jerry2016-02-03 17:38
  3. 为什么上传文件总是在服务器接收不到了?
    var url = System.Configuration.ConfigurationManager.AppSettings["server"];
    url += "/client/upload_file.aspx";
    var client = new HttpClient();
    string v_filepath = textBox1.Text;

    var context = client.Create(HttpMethod.Post, url, data: new { addname = "ahw", username = "admin", file = new HttpPostFile("file", v_filepath) });

    context.Send();

    2016-01-11 16:27
  4. 源码呢?

    test2016-01-02 02:25
  5. 怎么设置keep-alive啊

    12015-12-20 09:49
  6. 太好了,有更新。

    Demo2015-12-15 14:57
  7. 支持我鱼大大

    wukk2015-12-14 13:21
  8. 支持鱼大1.gif

    夏天不知冬的冷2015-12-14 01:06
  9. 我的工具可以用这个更新了吼吼

    xao2015-12-14 00:28
  10. 必须支持。要更新的名字哎

    Kvkens2015-12-13 23:39