Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495

Отображение сообщений в реальном времени

05.03.2015, 06:00. Показов 2505. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Надеюсь правильно выбрал тему для создания этого вопроса. В общем, передо мной стоит такая задача.
Есть PHP скрипт, который парсит данные. Работает он довольно долго и в процессе работы выдаёт сообщения о том, какую информацию он сейчас обрабатывает, либо, сообщения об ошибках, если что-то пошло не так, в общем, сообщениями отображают, что сейчас в данный момент происходит в скрипте.

Мне нужно сделать так, чтобы эти сообщения можно было-бы получать на клиенте в реальном времени. Т.е., я зашел на страницу, нажал запуск, выполнился ajax запрос, сервер запустил скрипт и все сообщения, которые вываливает php, получать в виде формата json на клиент, где я их буду выводить и так до конца выполнения php скрипта.
Гугл вывел меня на comet, но я не очень понимаю как мне применить данный подход в своей задаче. Как я понял, есть 2 способа реализации вывода ответов сервера в реальном времени, это: long-polling и streaming.

Long-polling мне не подходит, т.к. если я правильно понял, здесь подразумевается то, что я буду в цикле отсылать запросы на сервер и тогда получается, что при каждом запросе на сервер, скрипт будет запускаться заново, а мне нужно, чтобы он один раз запустился и в процессе работы получать сообщения от него.
Streaming - принцип при котором создаётся постоянное соединение, это как раз то что мне нужно, но к сожалению, там нужны специфические настройки сервера, как я понял, а реализовать это у меня нет возможности, т.к. ограничен стандартными apache2 + php.

В общем, прошу совета как решить свою задачу, куда смотреть и что искать. Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2015, 06:00
Ответы с готовыми решениями:

Получение сообщений и т.п. в реальном времени
Доброго времени суток. В силу разных обстоятельств у меня возникла потребность сделать сайт в реальном времени, помогите пожалуйста. Всё...

Как сделать отображение в реальном времени: текста из поля, в другом поле?
Нужно сделать простую штуку: 1. Обычное поле для ввода текста. 2. Поле для отображения в реальном времени, того что сейчас печатаешь в...

Обновление информации в реальном времени
Здравствуйте, у меня есть таблица с последними заказами, сейчас я ее обновляю вот так: function lastResult() { $.ajax({ ...

7
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
05.03.2015, 07:01
Лучший ответ Сообщение было отмечено dalay_lama как решение

Решение

Цитата Сообщение от dalay_lama Посмотреть сообщение
Long-polling мне не подходит, т.к. если я правильно понял, здесь подразумевается то, что я буду в цикле отсылать запросы на сервер и тогда получается, что при каждом запросе на сервер, скрипт будет запускаться заново, а мне нужно, чтобы он один раз запустился и в процессе работы получать сообщения от него.
Нужно просто создать дополнительный php-скрипт и на него переодически отправлять запросы.

1. Через ajax посылаем асинхронный запрос на основной скрипт (php).
2. Основной скрипт по мере выполнения каких-либо действие сохраняет в БД результаты выполнений (можно без бд - просто файлы)
3. А теперь переодически отправляем запрос доп. php-скрипту который берет эти результаты выполнений и отправляет ответ в js
4. Ну а js в свое время показывает результаты в браузере

Добавлено через 2 минуты
зы: В зависимости в каком виде должны быть результаты выполнений, то возможно можно будет сохранять их в формат csv (например) из основного php-скрипта и через js читать сразу этот csv... И тогда никакого дополнительного php-скрипта не нужно будет
1
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
05.03.2015, 07:23  [ТС]
Тоже похожая мысль была про БД, но сообщений довольно много и они часто делаются, поэтому не очень хотелось постоянно бд дёргать, поэтому думал можно решить проблему постоянным соединением... С файлом тоже есть некоторые заморочки: как например отследить какие сообщения были добавлены в период между повторной отправкой запроса? Можно конечно в сессии хранить, но как-то на костыль больше похоже...
А про csv первый раз слышу, надо будет почитать.
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
05.03.2015, 07:41
Цитата Сообщение от dalay_lama Посмотреть сообщение
С файлом тоже есть некоторые заморочки: как например отследить какие сообщения были добавлены в период между повторной отправкой запроса?
Сохраняем так же и время выполнения операции... ну а там по времени ориентируемся что и когда было выполненно.
Цитата Сообщение от dalay_lama Посмотреть сообщение
Можно конечно в сессии хранить, но как-то на костыль больше похоже...
Возможно даже и костыль не получится. Чтобы сохранилась сессия должны быть отправлены куки в браузер (т.е. заголовки). А т.к. основной скрипт еще не выполнился полностью, то в браузер заголовки еще не дойдут (вот дойдут или нет - это надо уточнить на практике). Ну а если не дойдут (что вероятнее всего), то ни в других php-скриптах не будет данных о сессиях ни в js не будет созданных кук (т.е. обмен данными не получится).
Цитата Сообщение от dalay_lama Посмотреть сообщение
А про csv первый раз слышу, надо будет почитать.
Это просто формат хранения данных

Добавлено через 1 минуту
Цитата Сообщение от dalay_lama Посмотреть сообщение
поэтому думал можно решить проблему постоянным соединением...
Ну если есть такая возможность, то имхо наиболее лучший вариант... и на костыль походить не будет
1
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
05.03.2015, 07:47  [ТС]
Цитата Сообщение от GalaX Посмотреть сообщение
Ну если есть такая возможность, то имхо наиболее лучший вариант
Я тоже так думаю, но если бы знал как это реализовать, не стал бы сюда писать в любом случае спасибо, вы очень помогли
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
05.03.2015, 07:56
С постоянными соединениями не работал, поэтому ниче не могу подсказать.
С бы сделал с помощью файла, пусть это по сравнение с постоянным соед-ем похоже на костыль, но зато будет работать на любом хостинге и при перезде не потребуется дополнительных настроек сервера.
1
 Аватар для dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
05.03.2015, 08:16  [ТС]
Я тоже решил на файле остановиться. Только вот не совсем понял вашу мысль по поводу сессий. Сессия и основной скрипт ведь никак связаны не будут, вот примерно как я это видел:
отсылаем запрос на основной скрипт
PHP
1
2
3
//main.php
$parser = new Parser();
$parser->run();//погнал работать
далее начинаем отсылать запросы на дополнительный скрипт:
PHP
1
2
3
4
5
6
7
8
//helper.php
session_start();
$last_row = $_SESSION['last_row'];//получаем строку, которую в последний раз прочитали
if ( !$last_row ) $last_row = 0;
$new_last_row = get_last_row_file();//эта функция вернёт последнюю строку файла на текущий момент
$messages = get_logs($last_row, $new_last_row);//функция вернёт ассоциативный массив с сообщениями, которые хранятся в файле,  между указанными строками
$_SESSION['last_row'] = $new_last_row;
echo json_encode($messages);
Ну вот примерный набросок как я думал сделать, разве здесь будут проблемы с сессиями? или так не получится?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
05.03.2015, 08:26
Цитата Сообщение от dalay_lama Посмотреть сообщение
Сессия и основной скрипт ведь никак связаны не будут
Ну тады все нормуль - мона и с сессиями делать

Добавлено через 52 секунды
Цитата Сообщение от dalay_lama Посмотреть сообщение
Ну вот примерный набросок как я думал сделать,
В правильном направлении движешься
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2015, 08:26
Помогаю со студенческими работами здесь

обновление страницы в реальном времени
дела такие, мне на странице нужно, что бы скрипт в реальном времени изменял одно поле на странице (вставляя туда код из файла на сервере,...

Медиазапросы с js: изменения в реальном времени
Если создать обычный медиазапрос на css, то изменения видны при сужении экрана в реальном времени. А если через JS к примеру: var mql...

Возможно ли программирование в реальном времени?
Писал раньше на Java, в среде Eclipse. Писал игры. Запускал через debug и мог изменять игру прямо в реальном времени без её перезапуска....

Обновление страницы в реальном времени
Помогите, пожалуйста! Нужно, чтобы элементы на страницы автоматически обновлялись каждую секунду, НО только если там что то поменяется. Как...

Вывод логов в реальном времени
Привет всем. Появилась идея прикрутить лог на сайте. Стоят скрипты на кроне и выводят результат, для всех пользователей (Сделаю к примеру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru