我的一个伙伴过去曾告诉我他看过ServiceStack。说它看起来不错,但它没有异步支持所以在他的书中,它不是一个使用这个框架的选项(没有好的,如果没有异步),我必须有点同意。
除非ServiceStack添加了异步,否则不确定这对我来说是不是一个好选择。
这让我想知道a)如果没有异步,stackoverflow是否真的使用了这个? b)如果a是,那么它显然必须是一个高度定制的版本,它可能有异步吗?
我确信来自stackoverflow的人可以回答这篇文章。
答案 0 :(得分:14)
已添加most requested feature服务器端异步支持,其中ServiceStack中的HttpHandler现在从实现HttpAsyncTaskHandler
的公共IHttpAsyncHandler
基类继承。这样,您就可以通过http://bit.ly/1cOJ3hR
E.g。服务现在可以有一个对象,任务或异步任务返回类型,可以返回已启动或未启动的任务(我们将自己启动)。这种转变尽可能顺利,所有现有服务都像以前一样继续工作,所有测试都通过了。
在匹配新的服务器端异步故事并且现在所有项目都已升级到.NET 4.0时,所有服务客户端都已更改为返回.NET 4.0任务的所有异步操作,因此可以在C#的异步/中使用它们等待方法。 Async的一些示例:http://bit.ly/17ps94C
Async API还提供OnDownloadProgress回调,您可以使用它来在用户界面中提供进度指示器,例如:http://bit.ly/19ALXUW
Async overloads have also been added to HTTP Utils,它为调用外部第三方(即非ServiceStack)HTTP服务提供了一个很好的API。
不确定实际测量结果是否导致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 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操作。