[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ajax запрос без ожидания ответа
Страницы: 1, 2
Remka
Всем привет.

Стоит задача отправить Ajax запрос на проверку наличия новых сообщений в почтовых ящиках. Так как в подключен не один ящик а 3 +imap папки то запрос получается медлительным (пока обойдешь все ящики и папки и узнаешь количество сообщений проходит примерно 5-6 секунд).

Как дела обстоят сейчас.
1. Есть JS который раз в 2.5 сек отправляет Ajax запрос
2. Серверная часть принимает запрос и делает проверку пришло ли время проверять наличие новых сообщений (минимум 1 раз в минуту)
3. Если не пришло время то возвращаем некоторые статистики из внутренней базы

4. А если пришло время то идем по всем подключенным ящикам и проверяем наличие новых сообщений.

Вот до третего пункта все работает прекрасно. Но как только раз в 60 сек идет проверка новых сообщений приложение зависает на 5-12 секунд. Как мне решить данную проблему?
Я думал про завершение процесса автономно, как мне лучше поступить?
как мне вернуть ответ Ajax до завершения обхода всех ящиков? Или как мне послать Ajax например с максимальным ожиданием ответа 1 сек?
Kusss
А не проще крон использовать ?
Проверять там новые письма(каждую минуту) - записывать результат , и по запросу выдавать этот самый результат (считай новые письма) ?
sergeiss
Цитата (Kusss @ 26.02.2014 - 12:54)
А не проще крон использовать ?

Либо крон, либо можно (может быть даже лучше) сделать демона на ПХП или другом языке, который будет проверять и загружать почту.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Remka
Ну мне загружать почту ненужно. Мне нужно просто проверить наличие новых сообщений. А дальше делается все гораздо проще я открываю список сообщений и там уже посылаются запросы на получение новых писем точнее их заголовков, и уже при открывании сообщения оно скачивается с сервера.

Сейчас все прекрасно работает но раз в минуту вся админка подвисает на 6-8 секунд. Это конечно не критично то жудко бесит.

Мне даже нужен не совсем демон и крон для таких задач не хочется подключать. Нужно просто отправить запрос из JS без ожидания ответа. чтобы другие Ajax запросы не вставали в очередь.
sergeiss
Цитата (Remka @ 26.02.2014 - 13:25)
Мне даже нужен не совсем демон и крон для таких задач не хочется подключать.

Почему "не нужен", почему "не хочется"? Любой из этих вариантов решает твою проблему: аяксовый запрос будет "мухой летать" smile.gif Пусть не загружать почту, пусть только список. Но чтобы он уже был готовый, этот список, на момент обращения.

PS. По сути дела, в данный момент ты тот же крон и хочешь сделать, только с аяксовым управлением. Зачем? Есть более правильные инструменты.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Remka
sergeiss - На сколько я знаю демон на php работать будет только на Unix системах? под виндой он врятли будет работать. А крон он не на всех хостингах ставится. Если есть ссылочка на хороший мануал по написанию демона который будет работать везде буду очень благодарен.
sergeiss
Вот ссылка хорошая http://kvz.io/blog/2009/01/09/create-daemons-in-php/ (сорри, ин инглиш, но написано хорошо очень и по сути программирования, и без сложных наворотов английского языка).

А под виндой можно использовать "Плановые задачи" - та же хрень, что и крон в юниксе.

Опять же, что такое демон? Это прога, которая запущена и периодически что-то делает в течение длительного времени. Возможно, как-то реагирует на внешнее воздействие. Это можно на ПХП и под виндой сделать, не только в юниксе smile.gif Самолично делал. Там единственные грабли оказались - это забивание памяти. Надо ансетить все переменные, когда они становятся не нужны.

Да, в юниксе этого демона можно встроить в систему (согласно ссылке, что я дал чуть выше). В Винде я без этого встраивания обошелся. Но демон от этого не перестал быть самим собой.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
Цитата (Remka @ 26.02.2014 - 11:25)
Нужно просто отправить запрос из JS без ожидания ответа. чтобы другие Ajax запросы не вставали в очередь.

проблема не в аяксе, блокируются сессии. Перед долгими запросами к почтовикам делай session_write_close(), а после долгих запросов session_start(), если нужно что то в сессию сохранить.
Цитата (Remka @ 26.02.2014 - 11:45)
На сколько я знаю демон на php работать будет только на Unix системах? под виндой он врятли будет работать.

будет, под виндой они называются службами. Службу можно сделать и на PHP если нужно. Хотя вряд ли это твой случай.
Kusss
Аякс без ответа - это обычный пост запрос каждую минуту

setInterval( function() {
$.post('check.php',{'check' : 'ok'});
},60000);

только это будет посылаться со всех открытых страниц.
Remka
Спасибо за ответы буду читать.

Все равно наверное буду писать демон под это. но сейчас поставил session_write_close и все заработало. killer8080 - Можно по подробнее почему такое происходит? у меня цикл который перебирает примерно 12 ящиков и у каждого узнает количество новых сообщений он также срабатывает но задержка раз в минуту ушла.
Remka
Kusss ожидание ответа все равно будет просто выводится он не будет.
AllesKlar
Remka
Я может не правильно понял суть проблемы, но ведь аякс отправляется асинхронно.
В этом, можно сказать, и есть фишка аякса.
Запрос отправили, и дальше себе работаем. Оп, пришел ответ, где там функция success...
Эмулирование НЕ ожидания ответа.. просто success неичего не делает.
И вообще... помойму (могу ошибаться) в http невозможно что-то отправить без ожидания ответа, т.к. ответ это из серии TCP/IP а безответ это UPD
(Я ща бред написал, да? smile.gif)

Его можно отправить синхронно, но тогда тормоза у браузера жуткие.

_____________
[продано копирайтерам]
Remka
AllesKlar У меня загружается шаблон с js кодом где я отправляю запрос Ajax и получаю ответ какой шаблон мне стоит загрузить. Дальше вся перелинковка идет тоже средствами Ajax то есть это и отображение контента и под грузка меню и прочих вещей. И я просто физически наблюдаю что в момент обновления количества сообщений в ящике я не могу ничего отгрузить, то есть я нажимаю например на кнопку главная, и страница у меня весит в прелоадере до тех пор пока не отгрузится запрос на получения количества писем.
AllesKlar
Remka
ииии? Ты вот этот страшный запрос асинхронно отправляешь?
Кусок кода покажи.

_____________
[продано копирайтерам]
Remka

$.post(
'/index.php?rewrite='+FweUrlGet('path'),
{ajax:'interactive',cmd:'box_update'},
function onLoadSuccess(HtmlPage){

}

);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.