#ajax
#ajax
Вопрос:
На моем сайте я хочу отправить несколько ajax-запросов на сервер. Серверу придется выполнить несколько довольно сложных вычислений, прежде чем он сможет вернуть ответ; я думаю, это может занять 1-30 секунд, возможно, даже минуту. Это вызовет какие-либо проблемы? Например, ваш браузер закроет соединение? Если да, должен ли я посмотреть на другие технологии, такие как push-уведомления с node.js socket.io ?
Ответ №1:
В большинстве случаев браузер не закроет соединение в указанный вами промежуток времени (1-30 секунд), НО это может показаться «забавным» для пользователя.
Кроме того, я бы ВСЕГДА делал такой тяжелый подъем асинхронным … это открывает возможность масштабирования … в зависимости от того, что происходит в сети, push-уведомления могут не всегда работать, но это хорошая идея … возможно, вы можете объединить это с очень умеренным опросом (т. Е. Каждые 15 секунд или около того).
Ответ №2:
Я не знаю, с головы до ног, но 30 секунд звучит слишком долго. И если сегодня это может занять 30 секунд, то, вероятно, потребуется 5 минут через шесть месяцев после запуска вашего продукта или услуги.
Почему бы не создать систему опроса. Сделайте свой первоначальный запрос, чтобы запустить фоновое вычисление, затем выполняйте запросы ajax каждую секунду, чтобы узнать, завершено ли оно. Когда вы, наконец, добьетесь успеха, выполните вызов метода, который возвращает готовые результаты.
Комментарии:
1. Это не займет 5 минут в будущем, я специально ограничиваю это определенными временными рамками. Я пытался избежать повторного опроса сервера … каждый пользователь на сайте будет инициировать эти запросы; я хочу, чтобы это было как можно проще.
2. Если на ваш сервер будет одновременно заходить много пользователей, тогда вам действительно нужно рассмотреть решение для опроса. У вас может быстро закончиться количество сокетов с большим количеством пользователей. И если у вас много серверов, ваши балансировщики нагрузки НЕНАВИДЯТ поддерживать соединения в рабочем состоянии.
3. Итак, вы говорите, что лучше использовать ajax и опрашивать, чем использовать сокеты и поддерживать множество подключений? По «многим»… Я не ожидаю, что мой сайт станет чрезмерно популярным. Может быть, 100-1000 пользователей онлайн одновременно, если мне повезет!
Ответ №3:
Для запросов AJAX не существует стандартного времени ожидания. Вопреки тому, что говорит @Yahia, большинство браузеров в конечном итоге закроют затянувшееся соединение. Я проверил это в нескольких браузерах пару лет назад. Firefox, например, закроет соединение через несколько часов. То, что вы пытаетесь сделать, должно быть решено с помощью websockets или (длительного) опроса с установленным таймаутом, который обновляет запрос.
Ни один современный браузер не должен закрывать соединение через 30 секунд или минуту, но вы никогда не знаете.