Мы создали веб-службу, которая загружает данные из внешнего API. Стандартная страница содержит 6-8 модулей, все данные по загрузке из разных ресурсов API. Это выглядит так (каждый блок загружается с другого URL-адреса, например,/cars,/phones,/games ... C# Web API - Блокировка
Один вызов внешнего API может занять примерно 10-15 секунд (не совсем необычно) ...
При загрузке страницы каждый блок будет запускать вызов Ajax с помощью jQuery (мы используем магистраль), который запрашивает наш собственный API (он как прокси, только перенаправляет вызов на внешний API) для данных.
С самого начала мы подумали: «Ах, хорошо, ajax решит все наши проблемы» ... и это происходит на стороне клиента ... Однако мы не используем async или что-то подобное на стороне сервера, поэтому Я думаю, вы можете видеть, что t проблем, с которыми мы сталкиваемся ... это правильно, блокируя потоки.
Из-за этого у нас не может быть более 2-3 одновременных пользователей. Мы используем C# MVC вместе с Web Api, а на интерфейсе мы используем Backbone.
Мой вопрос: будут ли асинхронные контроллеры решать наши проблемы? Или мы должны реализовать это по-другому? Некоторые из вас скажут: «Просто кешируйте данные, и все будет хорошо». И да, мы кэширование данных, но он все равно будет блокировать все нити (не так долго, как первый запрос, но все же заметно)
я вижу довольно много различных решений для этого:
- Обратный ajax - как http://pokein.com/?
- SignalR? http://www.asp.net/signalr
- Асинхронные контроллеры (с асинхронными методами Thats получения данных, конечно ...)
Итак, что же вы, ребята, рекомендуем?
Кроме того, я нашел это: Why is my async ASP.NET Web API controller blocking the main thread? Где ответ, предполагающий, что это проблема с самим браузером, что он не разрешает множественные одновременные вызовы перед получением ответа от первого запроса?