ServiceStack没有服务器端异步支持

时间:2013-09-19 18:17:45

标签: servicestack

我的一个伙伴过去曾告诉我他看过ServiceStack。说它看起来不错,但它没有异步支持所以在他的书中,它不是一个使用这个框架的选项(没有好的,如果没有异步),我必须有点同意。

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

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

我确信来自stackoverflow的人可以回答这篇文章。

1 个答案:

答案 0 :(得分:14)

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

已添加most requested feature服务器端异步支持,其中ServiceStack中的HttpHandler现在从实现HttpAsyncTaskHandler的公共IHttpAsyncHandler基类继承。这样,您就可以通过http://bit.ly/1cOJ3hR

中所示的多种方式从服务中返回异步任务

E.g。服务现在可以有一个对象,任务或异步任务返回类型,可以返回已启动或未启动的任务(我们将自己启动)。这种转变尽可能顺利,所有现有服务都像以前一样继续工作,所有测试都通过了。

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

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

Async API还提供OnDownloadProgress回调,您可以使用它来在用户界面中提供进度指示器,例如:http://bit.ly/19ALXUW

Http Utils中的异步API

Async overloads have also been added to HTTP Utils,它为调用外部第三方(即非ServiceStack)HTTP服务提供了一个很好的API。


缓存提供比Async

更好的性能

不确定实际测量结果是否导致Async对于维护高性能系统是必需的,因为良好的缓存策略将提供比Async更好的性能。有许多高性能服务和网站不使用异步,例如YouTube is built with 1M lines of blocking Python to handle 4 Billion views a day,最近的Disqus发布了他们如何将Django(一个沉重的Python Web框架)发送到scale to 8 billion page views by leveraging HTTP Caching。对于大多数多线程站点/服务(例如.NET / Ruby / Python),阻塞IO是常态,而不是异步 - 这应该测量所有过早优化,以计算它是否实际产生任何最终用户/利用率的好处。 / p>

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

StackOverflow本身是一个ASP.NET MVC网站,它使用标准的同步MVC控制器,并采用良好的缓存策略,利用本地和分布式缓存,并使用ServiceStack的JSON序列化程序。所以即使使用同步MVC控制器StackOverflow has extremely good server utilization for handling 95M page views/month。 StackOverflow Careers 2.0使用ServiceStack及其RedisMQ support进行所有BackOffice操作。