Возможные способы отправки вывода вызванной PHP программы .exe (которая выполняется как отдельный процесс, а не в PHP) обратно клиенту iPhone - PullRequest
0 голосов
/ 07 января 2010

Клиентское приложение моего iPhone загружает данные на сервер, который работает на PHP. Существует код для вызова программы .exe на стороне сервера на PHP. Программа .exe примет загруженные данные и запустит процесс самостоятельно. Это означает, что выполнение PHP завершится без ожидания завершения программы .exe. После того, как программа .exe закончила обработку загруженных данных и получила вывод, я хочу, чтобы этот вывод был отправлен обратно на iPhone.

Обычно, если мы вызываем программу .exe для запуска внутри php, не делая ее отдельным процессом, нам приходится ждать завершения программы и мы можем отправить результат обратно клиенту iPhone.

Запустив программу .exe как отдельный процесс, невозможно отправить данные обратно через PHP, который вызывает программу .exe. Вопрос в том, что если у нас программа .exe работает на отдельном процессе, а не на сценарии PHP, каковы возможные способы отправки вывода обратно клиенту iPhone?

Ответы [ 4 ]

1 голос
/ 07 января 2010

Вы можете сделать это с помощью службы push-уведомлений Apple, но это, вероятно, излишне, если только вы не думаете, что обработка данных займет много времени, и / или вы хотите обновить значок приложения после завершения обработки, даже если приложение не запущено.

Ожидаете ли вы, что пользователь будет просто терпеливо ждать результата, или они собираются запустить данные и проверить позже? Если это займет всего пару секунд, вы можете просто провести опрос приложения iPhone для получения результата, немного подождав (пока отображается индикатор прогресса).

1 голос
/ 07 января 2010

Вам будет трудно повторно подключиться к iPhone после разрыва соединения. Возможно, он находится вне зоны покрытия, возможно, изменился IP-адрес, ......

Лучше всего повторно подключить iPhone к серверу и опросить его информацию.

1 голос
/ 07 января 2010

Это проблема, которую вы обрисовали. Позвольте мне объяснить пару идей.

Прежде всего, если вы прервете первоначальный запрос на загрузку, единственный разумный способ проверить, выполняется ли он, - каждые несколько секунд опрашивать iPhone. Отправляйте запрос в «get-update.php» каждые 5 секунд, чтобы проверить, есть ли у вас данные.

Используя $ _SESSION, вы сможете хранить токен, который будет идентифицировать данные после завершения обработки.

Что касается самого процесса, вы можете достичь этого несколькими способами. Один из них - сделать довольно стандартную двойную вилку, отсоединив дочерний процесс от родительского, поэтому он продолжится после выхода из родительского процесса.

Другим (рекомендуемым) будет создание серверного процесса, который будет следить за запросами в вашей базе данных, извлекать их, обрабатывать и обновлять базу данных. Поэтому, когда исходный скрипт загрузки действительно загружает данные, PHP помещает их в базу данных, сохраняет идентификатор записи в $ _SESSION и возвращает пользователю.

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

Сценарий get-update.php будет читать $ _SESSION для идентификатора записи и проверять базу данных, если данные были обработаны (или в каком состоянии).

Если у вас нет возможности запустить фоновый процесс, и вы ограничены использованием PHP, вы можете выполнить магию двойного разветвления и разветвить другой процесс PHP, чтобы выполнить чтение / обновление / обновление базы данных.

Не стесняйтесь комментировать вопросы.

Вам нужен (а) хороший способ передачи данных в программу и (б) хороший способ вернуть данные.

1 голос
/ 07 января 2010

Я бы сказал, что это идеальный случай для фрагмента AJAX , который часто опрашивает данные, скажем, из текстового файла, в который .exe записывает свой статус.

Сценарий загрузки, который вы вызываете, может вернуть уникальный идентификатор некоторому виду клиенту загрузки. Используя этот идентификатор, клиент будет опрашивать статус exe-файла (например, «существует ли выходной файл xyz?»), Пока не получит положительный отзыв.

...