fusillade 2.6.30
ID 预留dotnet add package fusillade --version 2.6.30
NuGet\Install-Package fusillade -Version 2.6.30
<PackageReference Include="fusillade" Version="2.6.30" />
paket add fusillade --version 2.6.30
#r "nuget: fusillade, 2.6.30"
// Install fusillade as a Cake Addin #addin nuget:?package=fusillade&version=2.6.30 // Install fusillade as a Cake Tool #tool nuget:?package=fusillade&version=2.6.30
<br /> <a href="https://github.com/reactiveui/fusillade"> <img width="120" heigth="120" src="https://raw.githubusercontent.com/reactiveui/styleguide/master/logo_fusillade/main.png"> </a>
Fusillade:适用于移动开发的具有见解的 HTTP 库
Fusillade 帮助您在用 C# 编写的移动和桌面应用程序中编写更有效的代码。其设计目标和功能集合受到了 Volley 以及 Picasso 的启发。
这对我有什么作用?
Fusillade 是一套 HttpMessageHandlers(即 HttpClient 的 "驱动程序"),可让您的移动应用程序更高效、更响应。
自动消重有关请求 - 如果您的 TweetView 类的每个实例都请求相同的头像图片,Fusillade 仅执行 一次 请求并将结果提供给每个实例。所有
GET
、HEAD
和OPTIONS
请求都进行了消重。请求限制 - 请求总是以4个为单位发送(Volley默认设置) - 在不过度压垮网络连接的情况下发起大量请求。
请求优先级 - 背景请求应该运行在比用户发起的请求较低的优先级,但实际上实现这一点相当困难。通过在应用程序中进行一些更改,您可以向Fusillade暗示哪些请求应该跳到队列的前面。
投机性请求 - 在页面加载时,许多应用程序会尝试投机性地缓存数据(即尝试预先下载用户可能点击的数据)。将请求标记为投机性将允许请求直到达到某个数据限制,然后取消未来的请求(例如,“在获得5MB缓存数据之前,继续在后台下载数据”)
如何使用它?
与Fusillade交互的最简单方法是使用名为NetCache
的类,该类包含多个内置场景。
public static class NetCache
{
// Use to fetch data into a cache when a page loads. Expect that
// these requests will only get so far then give up and start failing
public static HttpMessageHandler Speculative { get; set; }
// Use for network requests that are running in the background
public static HttpMessageHandler Background { get; set; }
// Use for network requests that are fetching data that the user is
// waiting on *right now*
public static HttpMessageHandler UserInitiated { get; set; }
}
要使用它们,只需创建一个带有给定处理器的HttpClient
。
var client = new HttpClient(NetCache.UserInitiated);
var response = await client.GetAsync("http://httpbin.org/get");
var str = await response.Content.ReadAsStringAsync();
Console.WriteLine(str);
在哪里使用?
到处都适用!Fusillade是一个便携式库,它可以在以下平台中使用
- Xamarin.Android
- Xamarin.iOS
- Xamarin.Mac
- Windows桌面应用程序
- WinRT/Windows Phone 8.1应用程序
- Windows Phone 8
关于投机性请求的更多信息
通常,在移动应用程序中,每当应用程序从待机状态恢复时,您都希望重置投机限制。您如何做这取决于平台,但在那个回调和调用中,您需要调用...
NetCache.Speculative.ResetLimit(1048576 * 5/*MB*/);
离线支持
Fusillade可以将它看到的响应进行可选缓存,在您的应用程序离线时(或者您只是希望通过获取缓存数据来提高应用程序的速度)回放给您。以下是设置它的方法
- 实现IRequestCache接口
public interface IRequestCache
{
/// <summary>
/// Implement this method by saving the Body of the response. The
/// response is already downloaded as a ByteArrayContent so you don't
/// have to worry about consuming the stream.
/// <param name="request">The originating request.</param>
/// <param name="response">The response whose body you should save.</param>
/// <param name="key">A unique key used to identify the request details.</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>Completion.</returns>
Task Save(HttpRequestMessage request, HttpResponseMessage response, string key, CancellationToken ct);
/// <summary>
/// Implement this by loading the Body of the given request / key.
/// </summary>
/// <param name="request">The originating request.</param>
/// <param name="key">A unique key used to identify the request details,
/// that was given in Save().</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>The Body of the given request, or null if the search
/// completed successfully but the response was not found.</returns>
Task<byte[]> Fetch(HttpRequestMessage request, string key, CancellationToken ct);
}
- 将实例设置为
NetCache.RequestCache
,然后发起一些请求
NetCache.RequestCache = new MyCoolCache();
var client = new HttpClient(NetCache.UserInitiated);
await client.GetStringAsync("https://httpbin.org/get");
- 现在,您可以使用
NetCache.Offline
在互联网断开连接时获取数据
// This will never actually make an HTTP request, it will either succeed via
// reading from MyCoolCache, or return an HttpResponseMessage with a 503 Status code.
var client = new HttpClient(NetCache.Offline);
await client.GetStringAsync("https://httpbin.org/get");
如何与ModernHttpClient一起使用?
向应用程序启动类的一个静态构造函数中添加此行
using Splat;
Locator.CurrentMutable.RegisterConstant(new NativeMessageHandler(), typeof(HttpMessageHandler));
优先级是什么意思?
优先级顺序是:用户发起 > 背景 > 投机性。这意味着任何设置为用户发起的请求优先级都高于背景或投机性。
显式是一个特殊的选项,允许您设置一个可以高于、低于或介于任何预定义情况之间的显式值。
var lowerThanSpeculative = new RateLimitedHttpMessageHandler(
new HttpClientHandler(),
Priority.Explicit,
9);
var moreThanSpeculativeButLessThanBAckground = new RateLimitedHttpMessageHandler(
new HttpClientHandler(),
Priority.Explicit,
15);
var doItBeforeEverythingElse = new RateLimitedHttpMessageHandler(
new HttpClientHandler(),
Priority.Explicit,
1000);
静态的吗?真讨厌!我喜欢$OTHER_THING!您的优先级有问题,我想制定我自己的方案!
NetCache
只是一个预先提供的默认设置,有趣的代码在一个名为RateLimitedHttpMessageHandler
的类中。您可以显式创建它并根据需要进行配置。
这个名字是什么意思?
“Fusillade”这个词是“Volley”的同义词😃
贡献
Fusillade在OSI批准的开源许可下开发,可以免费使用和分发,即使用于商业用途。由于我们的开源众筹模式和透明度,我们可以将支持和资金通过贡献者和社区渠道流。我们❤️参与这个项目的人,并且我们很想让您加入,尤其是如果您是初学者,或者以前从未为开源项目做过贡献。
因此,为了您这迷人的想加我们的漂亮的人,以下是您如何支持我们的方式
- 在StackOverflow上回答问题
- 传递知识并教授下一代开发者
- 捐赠和企业赞助
- 要求您的雇主进行回馈并贡献开源
- 在合适的地方或内容短缺时提交文档更新。
- 对代码库做出贡献。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 支持。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 支持。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 支持。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.0 支持。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- punchclock ( ≥ 3.4.143 )
- Splat ( ≥ 15.0.1 )
-
net6.0
- punchclock ( ≥ 3.4.143 )
- Splat ( ≥ 15.0.1 )
-
net7.0
- punchclock ( ≥ 3.4.143 )
- Splat ( ≥ 15.0.1 )
-
net8.0
- punchclock ( ≥ 3.4.143 )
- Splat ( ≥ 15.0.1 )
NuGet 包 (14)
显示依赖 fusillade 的前5个NuGet包
包 | 下载 |
---|---|
ModSink.Common
此库包含 ModSink 的大部分逻辑 |
|
XamBasePacket
包含所有必要的类、模型和库来开始开发Xamarin应用程序 |
|
Xablu.WebApiClient
Xablu WebApiClient 是一个旨在简化 .NET 项目中 Web API 服务消费的 C# HTTP 库 |
|
BD.Common.Mvvm
次元超越 Mvvm 库 |
|
TranquilHTTP
Tranquil HTTP 是一个针对移动开发的 C# HTTP 库,旨在使其解决复杂的 HTTP 通信场景变得非常简单 |
GitHub 仓库 (4)
显示依赖 fusillade 的前4个最受欢迎的GitHub 仓库
仓库 | 星星 |
---|---|
BeyondDimension/SteamTools
🛠「Watt Toolkit」是一个开源跨平台的多功能 Steam 工具箱。
|
|
reactiveui/ReactiveUI.Samples
此仓库包含 ReactiveUI 示例。
|
|
HTBox/crisischeckin
Crisischeckin 人道主义工具箱仓库
|
|
Respawnsive/Apizr
基于 Refit 的 Web API 客户端管理,但具有弹性(重试、连接性、缓存、身份验证、日志、优先级等)
|
版本 | 下载 | 最后更新 |
---|---|---|
2.6.30 | 1,018 | 5/2/2024 |
2.6.1 | 6,421 | 9/21/2023 |
2.4.67 | 18,393 | 2/1/2023 |
2.4.62 | 2,438 | 11/24/2022 |
2.4.47 | 3,750 | 6/22/2022 |
2.4.1 | 12,621 | 12/13/2021 |
2.3.1 | 32,028 | 1/22/2021 |
2.2.9 | 2,680 | 11/27/2020 |
2.2.1 | 2,447 | 10/23/2020 |
2.1.9 | 12,476 | 7/29/2020 |
2.1.1 | 26,865 | 5/10/2020 |
2.0.5 | 98,117 | 4/2/2019 |
2.0.2 | 3,736 | 2/19/2019 |
2.0.1 | 5,529 | 2/5/2019 |
1.0.0 | 51,954 | 9/5/2017 |
0.7.0 | 43,630 | 11/10/2016 |
0.6.0 | 96,411 | 5/1/2014 |
0.5.0 | 1,640 | 4/25/2014 |