5

我的一个朋友告诉我,他过去曾研究过 ServiceStack。说它看起来不错,但它没有异步支持,所以在他的书中,使用这个框架不是一个选择(如果没有异步就不好),我不得不同意。

除非 ServiceStack 添加了异步,否则不确定这对我来说是否是一个不错的选择。

这让我想知道 a) 如果没有异步,stackoverflow 是否真正使用它?b)如果是,那么它显然必须是它的高度定制版本,可能有异步?

我相信来自stackoverflow的人可以回答这个帖子。

4

1 回答 1

16

在 ServiceStack v4 中添加了服务器端异步

在ServiceStack中的HttpHandlers 现在继承自HttpAsyncTaskHandler实现IHttpAsyncHandler. 这使您可以通过多种方式从服务返回异步任务,如http://bit.ly/1cOJ3hR所示

例如,服务现在可以具有对象、任务或异步任务返回类型,它们可以返回已启动或未启动的任务(我们将自己启动)。这种过渡尽可能顺利,所有现有服务都像以前一样继续工作并且所有测试都通过了。

ServiceStack 服务客户端中基于任务的异步

为了匹配新的服务器端异步故事,并且现在所有项目都已升级到 .NET 4.0,所有服务客户端都已更改为为所有异步操作返回 .NET 4.0 任务,因此它们可以在 C# 的 async/await 方法中使用。一些异步的例子:http: //bit.ly/17ps94C

Async API 还提供了 OnDownloadProgress 回调,您可以利用该回调在 UI 中提供进度指示器,例如:http ://bit.ly/19ALXUW

Http Utils 中的异步 API

异步重载也被添加到 HTTP Utils中,它为调用外部第 3 方(即非 ServiceStack)HTTP 服务提供了一个很好的 API。


缓存提供比异步更好的性能

不确定是什么实际测量得出的结论是异步是维护高性能系统所必需的,因为良好的缓存策略将提供比异步更好的性能。有许多不使用异步的高性能服务和网站,例如YouTube 是用 100 万行阻塞 Python 构建的,每天处理 40 亿次观看,最近 Disqus 发布了他们如何获得 Django(一个沉重的 Python Web 框架)通过利用 HTTP 缓存将页面浏览量扩展到 80 亿次。对于大多数多线程站点/服务(例如 .NET/Ruby/Python),阻塞 IO 是常态,而不是异步 - 就像所有过早的优化一样,应该衡量它是否真的产生任何最终用户/使用收益。

StackOverflow 使用 ASP.NET 的 Sync MVC 控制器

StackOverflow 本身是一个 ASP.NET MVC 网站,它使用标准的同步 MVC 控制器,并采用良好的缓存策略,利用本地和分布式缓存,并利用 ServiceStack 的 JSON 序列化程序。因此,即使使用同步 MVC 控制器StackOverflow 每月处理 9500 万次页面浏览量,服务器利用率也非常好。StackOverflow Careers 2.0使用 ServiceStack 及其对所有 BackOffice 操作的RedisMQ 支持。

于 2013-09-19T18:56:47.593 回答