- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть страница с формой отправки файла, этот файл отправляется на сервер где с ним могут проделываться разные операции (очень долгая, более 15сек), и информация об этом выводится скриптом по ходу выполнения. Тут же назревает вопрос о том как заставить сервер выводить сообщения немедленно, а не после завершения работы скрипта.
Например что-то отсылаем:
В это время сервер выдает какие-то сообщения но операция еще не завершается и эти сообщения моментально приходят клиенту.
Проблема в том что success() сработает только когда скрипт выполнится, и для того чтобы решить такую задачу, информацию о операциях с файлом на сервере можно записывать в текстовый файл, а на клиенте по таймеру посылать параллельный запрос - опрашивать содержание текстового файла с информацией об операциях с файлом. Плюс для этого необходимо использовать session_write_close() чтобы это стало возможным. Это все геморный и устаревший способ, посылание лишних запросов, хотелось бы что то наподобие сокет-соединения, типа соединения не закрывается и в клиент попадают те самые сообщения с сервера...
Как это реализовать? подскажите подобные примеры...
Записывать данные в TXT файлик и с чего переодически считывать.
LEOnidUKG, я об этом и написал, но нужен же какой-то другой вариант... и с iframe - тоже плохой вариант
Есть ещё P2P передача данных в последних версиях мажорных браузеров через WebRTC. Помимо этого только постоянный долбёж, сокеты реализовать на стороне юзверя довольно проблематично.
Был когда-то такой скрипт rapidget - для скачки с файлообменников на сервер свой.
Насколько помню там прогресс реализовывался в виде выдачи яваскрипта, который браузер выполнял. А этот скрипт обновлял индикатор прогресса.
Т.е. сервер в пределах одного ответа выводил несколько тегов
<script></script> по мере готовности. В подробностях не копал, могу ошибаться, но вроде так это было сделано.
Дикий пионер, это не прокатит если на серваке стоит nginx. Он ничего не отдаст пока всё не будет загружено.
есть еще вебсокет во всех текущий версиях браузеров, а еще есть пуш уведомления с сервера, тоже вроде во всех основных браузерах текущих версиях. Но там придется подумать над серверной частью. А чем не устраивает тем же аяксом периодически запрашивать статус операции? по моему просто и удобно и на сервере особых проблем нет.
зачем текстовый файл? вовсе не обязательно, ведь инфу о статусе можно хранить в шаредной памяти, или в базе. iframe это вообще из прошлого века когда не было аякса.
Mad_Man - P2P это как я понимаю один-к-одному, а если несколько юзеров одновременно много разных файлов процессируют? imho в многопользовательской системе P2P не подходит в принципе.
Наконец можно сделать на ява-аплете или сильверлайте-дот-нете (С#), там вроде в отличие от ява-скрипт нет проблем с сокетами и на клиенте и на сервере. Ява и Сильверлайт(C#) плугины есть для всех браузеров.
vob2014, вебсокет - это лучший вариант как по мне, но это требует мороки на стороне сервера
кажется ты не обратил внимание на то, что аякс - асинхронный, то есть послав запрос прога не виснет, а продолжает работать и никто не мешает послать еще другие аякс запросы. Вебсокет (при наличие аякса и асинхронности) мне кажется не нужен или мягче говоря - мало актуален. Ну и наконец сейчас в лису-оперу-эксплорер-хром добавили и восе параллельные вычисления, так что даже долгий блокирующий НЕ яакс запрос к серверу можно вынести в параллельный процесс и скрипт не заблокируется. Так что периодический опрос состояния обработки на сервер с клиента через аякс по таймеру имхо оптимальный вариант не требующий установки асинхронных фреймворков на сервер как в случае с вебсокетоами (там нужен как минимум node.js) - все легко делается на банальном php даже на шаредном хостинге (много-клиентность там автоматом апач/сервер сам сделает).
то есть сама постановка вопроса в топике изначально ошибочна!
нет никакого внутри.
запрос посылается и мгновенно управление возвращается основному потоку ява-скрипт.
результат же хоть через час, когда появится тогда и дернет вот это твое
success: function(data) {
//вывод
}
а пока не дернет ты НЕ внутри аякс запросы, ты в основном потоке своей страницы (ява скрипта страницы, а не внутри аякс запроса) и можешь посылать другие аякс запросы.
тебя ввел в заблуждение синтаксис ява-скрипта
$.ajax({
type: 'POST',
url: script,
data: data,
success: function(data) {
//вывод
}
});
но пойми, несмотря на то что fucntion находится как бы внутри вызова яакса на самом деле она снаружи, и вызовется не внутри, а снаружи, когда будет готов ответ сервера.
Это достаточно заумная хреновина, когда объявляется безымянная ф-ия, кажется ее нельзя вызвать потом так как у нее нет имени, но можно! без имени! по внутреннему идентификатору тебе не видимому.
Прогеры пишущие такие коды очень гордяться собой ибо простому смертному типа тебя понимание этого не доступно :)