Я использую сервер apache xampp php
Я не могу
я хочу
Есть ли способ, которым я могу делать эти вещи ИЛИ должен ли я попытаться изучить любые другие серверы? Программирование сокетов – единственный способ?
Это … немного сложно.
я хочу
run php as service where php may run without being connected to client php execution can be triggered using http request by client php (continuous or triggered) have full access to the resources php can send the data from the resources to the client on response
Первое легко достижимо. Просто установите PHP как командную строку и запустите ее в бесконечном цикле (у командной строки нет времени истечения срока действия) или, может быть, лучше для того, что вам нужно, в качестве службы crontab. Для этого есть несколько утилит; они либо запускают скрипт каждые X секунд, либо перезапускают его, как только скрипт завершается.
Если сценарий каким-то образом (например, через базу данных) проверяет, имеет ли он «работу», то ваша цель 2 также достигается: скрипт веб-клиента HTTP должен только вставлять данные в базу данных, и это будет как если бы мастер-скрипт запускается веб-сервером. На самом деле происходит то, что мастер-скрипт обычно заканчивается немедленно (возможно, спящий на несколько секунд, а не на перегрузку сервера), но при следующем запуске он находит работу и делает это.
Затем ваша цель 3 достижима, если запустить мастер-скрипт с большим количеством привилегий. Пользовательский скрипт не может «получить доступ ко всем ресурсам», но может смиренно запрашивать данные, а мастер-скрипт (более безопасный) может любезно разрешить чтение таких данных и записать в базу данных (или файловую систему), где клиент может получить Это.
Наконец, ваша цель 4 достижима, читая данные и поставляя их в клиентский браузер со стороны клиента.
Пример рабочего процесса:
- 15:55:00 The master script runs. SELECT worktodo FROM thingstodo returns nothing - 15:56:00 The master script runs. SELECT worktodo FROM thingstodo returns nothing - 15:56:17 The client runs; it is a request for data from serial port. - 15:56:17 The request is stored in the DB and gets ID 12345 and status "WAITING"
Гипотеза одна – 15:56:18 Клиент завершает работу после написания «Работа была поставлена в очередь, подождите» и отправляет заголовок HTTP, обращаясь к самому себе:
Location: http://mylocation/script.php?check=12345
Гипотеза вторая – 15:56:19 Клиент ждет, скажем, десять секунд, на всякий случай, проверяя каждую секунду, чтобы убедиться, что работа выполнена. Если это так, то действуйте согласно 15:17:35; иначе делает, как в гипотезе один, говорит «Я вернусь» и умру с заголовком «Местоположение». – 15:56:20 Сценарий клиентов, благодаря заголовку Location, перезагружается с помощью check = 12345. Он соединяется с БД, видит, что статус 12345 не ЗАВЕРШЕН, отображает анимацию «Работа …», ждет пять секунд и снова умирает.
- 15:57:00 The master script gets awakened and finds there is one job in WAITING status; updates it in LOCKED status and places its own IP and PID in the proper fields, then decodes the work details, sees what needs to be done and does it. - 15:57:33 The work is done and the row gets updated again; now STATUS=COMPLETED - 15:57:35 Meanwhile the client gets called again, but this time it finds COMPLETED, so happily fetches the data and shows it to the customer, also deleting the row not to clutter the DB.
Другие возможности: – мастер-скрипт, находящий поле электронной почты, заполненное в строке задания, отправляет электронное письмо с соответствующей ссылкой на пользователя. – главный скрипт фактически спит большую часть времени, привязанный к сокету на порту XYZ, а клиентский скрипт «пробуждает» его, когда что-то нужно сделать. Это уменьшает задержку между запросом и ответом.
запускать php как службу, где php может работать без подключения к клиенту
Вы можете запустить PHP-скрипт, используя задачу cron