【发布时间】:2014-12-17 18:15:03
【问题描述】:
我们构建了一个从外部 API 加载数据的网络服务。一个标准页面包含 6-8 个模块,所有模块都从 API 的不同资源中加载数据。它看起来像这样(每个块从不同的 url 加载,例如 /cars、/phones、/games...
对外部 API 的一次调用可能需要 10-15 秒(一点也不稀奇)...
在加载页面时,每个块都会触发一个使用 jQuery(我们使用主干)的 Ajax 调用,该调用向我们自己的 API(它就像一个代理,只将调用转发到外部 API)请求数据。
从一开始我们就认为“啊,很好,ajax 将解决我们所有的问题”......在客户端确实如此......但是,我们没有在服务器端使用异步或类似的东西,所以我猜你能看出我们面临什么问题……没错,就是阻塞线程。
因此,我们的并发用户不能超过 2-3 个。 我们将 c# MVC 与 Web Api 一起使用,在前端我们使用 Backbone。
我的问题是;异步控制器会解决我们的问题吗?或者我们应该以另一种方式实现它?你们中的一些人会说“只要缓存数据就可以了”。是的,我们正在缓存数据,但它仍然会阻塞所有线程(不像第一个请求那样长,但仍然很明显)
我看到了很多不同的解决方案:
- 反向ajax - 比如http://pokein.com/?
- 信号R? http://www.asp.net/signalr
- 异步控制器(当然是使用异步方法获取数据...)
那么,你们有什么推荐的呢?
另外,我发现了这个:Why is my async ASP.NET Web API controller blocking the main thread? 答案表明这是浏览器本身的问题,在从第一个请求获得响应之前它不允许多个并发调用?
【问题讨论】:
标签: c# multithreading backbone.js asynchronous asp.net-web-api