Интересует, можно ли сделать такую штуку — отправляет аяксом запрос на сайт, он обрабатывается в течение 10-20 минут. В течение этого времени с переодичностью раз в 10 секунд отправляем на сайт другие аякс запросы, спрашивающие у сайта, как у него дела, как продвигается выполнение первого запроса и т.д. У меня получилось так, что пока не придет ответ на первый запрос, не приходят ответы и на последующие запросы, т.е. браузер тупо ждет ответа, а потом разом получает и ответ на первый запрос и несколько десятков ответов о состояние запроса.
Здравствуйте, Neir0, Вы писали:
N>Доброго времени суток.
N>Интересует, можно ли сделать такую штуку — отправляет аяксом запрос на сайт, он обрабатывается в течение 10-20 минут. В течение этого времени с переодичностью раз в 10 секунд отправляем на сайт другие аякс запросы, спрашивающие у сайта, как у него дела, как продвигается выполнение первого запроса и т.д. У меня получилось так, что пока не придет ответ на первый запрос, не приходят ответы и на последующие запросы, т.е. браузер тупо ждет ответа, а потом разом получает и ответ на первый запрос и несколько десятков ответов о состояние запроса.
наверное на тот самый первый запрос нужно, после его получения, вернуть результат — а потом уж мониторить состояние джоба, который выполняется по тому самому первому запросу.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Neir0, Вы писали:
N>>Доброго времени суток.
N>>Интересует, можно ли сделать такую штуку — отправляет аяксом запрос на сайт, он обрабатывается в течение 10-20 минут. В течение этого времени с переодичностью раз в 10 секунд отправляем на сайт другие аякс запросы, спрашивающие у сайта, как у него дела, как продвигается выполнение первого запроса и т.д. У меня получилось так, что пока не придет ответ на первый запрос, не приходят ответы и на последующие запросы, т.е. браузер тупо ждет ответа, а потом разом получает и ответ на первый запрос и несколько десятков ответов о состояние запроса.
А>наверное на тот самый первый запрос нужно, после его получения, вернуть результат — а потом уж мониторить состояние джоба, который выполняется по тому самому первому запросу.
Ну ответить на тот самый первый запрос не получится, поскольку он возвращает уже готовый ответ и раньше, чем через 10 минут, сделать ему это крайне затруднительно.
Это то как у меня реализовано сейчас, как я понимаю, можно просто отправить запрос, запустить механизм обработки, дать ответ, и потом уже отвечать на запросы о ходе выполения.
Не подскажите, как это можно организовать?
Re[3]: Множественное обращение к сайту
От:
Аноним
Дата:
22.12.10 09:50
Оценка:
Здравствуйте, Neir0, Вы писали:
N>Ну ответить на тот самый первый запрос не получится, поскольку он возвращает уже готовый ответ и раньше, чем через 10 минут, сделать ему это крайне затруднительно. N>Это то как у меня реализовано сейчас, как я понимаю, можно просто отправить запрос, запустить механизм обработки, дать ответ, и потом уже отвечать на запросы о ходе выполения. N>Не подскажите, как это можно организовать?
твой 1й запрос на сервере должен запустить длительную обработку асинхронно в новом потоке и сразу вернуть идентификатор процесса назад
Здравствуйте, Neir0, Вы писали:
N>Доброго времени суток.
N>Интересует, можно ли сделать такую штуку — отправляет аяксом запрос на сайт, он обрабатывается в течение 10-20 минут. В течение этого времени с переодичностью раз в 10 секунд отправляем на сайт другие аякс запросы, спрашивающие у сайта, как у него дела, как продвигается выполнение первого запроса и т.д. У меня получилось так, что пока не придет ответ на первый запрос, не приходят ответы и на последующие запросы, т.е. браузер тупо ждет ответа, а потом разом получает и ответ на первый запрос и несколько десятков ответов о состояние запроса.
<input id="Button1" type="button" value="button" onclick="start_counter()" />
<script language="JavaScript" type="text/javascript">
// ajax запрос на сервер
function request() {
$.ajax({
url: 'About.aspx', // указываем URL и
dataType: "json", // тип загружаемых данных
success: function (data, textStatus) { // вешаем свой обработчик на функцию success
if (data == 3) { // если сервер закончил выполнение LongMethod
clearTimeout(var_timer); // останавливаем рекурсивный опрос сервера
alert("остановились");
}
}
});
}
// рекурсия
function start_counter() {
request();
var_timer = setTimeout("start_counter()", 3000);
}
</script>
на странице где должен выполняться "длинный метод":
public partial class About : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["start"] == null)
{
System.Threading.Thread t = new System.Threading.Thread(LongMethod);
t.Start();
Session["start"] = 1; // начали работать
Response.End();
} else if (Convert.ToInt32(Session["start"]) == 3)
{
Response.Write("3"); // статус окончания выполнения LongMethod
Response.End();
}
}
private void LongMethod()
{
Thread.Sleep(30000);
Session["start"] = 3;
}
}
Здравствуйте, divergo, Вы писали:
D>Вы наверное не в курсе, но ajax запросы бывают синхронными и асинхронными. Используйте второй метод вместо первого, и будет Вам счастье. D>
Так они асинхронно шлются, а вот ответы приходят последовательно