Cron-задания на PHP для Socket-программирования - PullRequest
0 голосов
/ 04 мая 2011

Я разрабатываю один веб-сайт для отслеживания устройств GPS.Я настраиваю устройства (GPS) на имя хоста и конкретный номер порта, чтобы установить соединение с моим размещенным сервером и отправлять координаты через регулярные промежутки времени, например, от 1 минуты до 5 минут.

Я написал страницу PHP дляЗапустите сервер сокетов, чтобы принимать запросы от клиентов сокетов (устройств GPS) и анализировать их перед сохранением в базе данных.Вплоть до этой работы отлично.

Мои проблемы:

  1. Мне нужно держать на открытой странице слушателя, если я делаю это из заданий cron, у них есть ограничение, как cronзадание может выполняться только в течение нескольких минут.

  2. В случае, если страница прослушивателя сервера останавливается / прерывается, порт не закрывается автоматически, поскольку он прерывается.Чтобы использовать тот же порт, нам нужно перезагрузить систему, что невозможно при хостинге.

Пожалуйста, помогите, каков правильный подход.

Моя главная проблема сейчас заключается в том, какзакрыть открытый порт сокета, когда страница прерывается.

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

оставление открытых сокетов не будет поддерживаться многими хостерами.Единственный способ сохранить работоспособность сокета - это запустить собственный сервер.Поскольку на хостинг-сервере размещается много веб-сайтов, непрерывное выполнение задания cron требует от сервера слишком много ресурсов.(Что, если все будут запускать cronjobs все время, сервер будет зависать в мгновение ока ...)

Мой совет, посмотрите на VPS или начните размещать свой собственный сервер, и вы можете запустить его как системную задачу: D

Чтобы быть более понятным в вашем вопросе, просто PHP не даст вам того, куда вы хотите; -)

0 голосов
/ 04 мая 2011

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

Возможно, для второй проблемы вы можете использовать функцию PHP register_shutdown_function.Не совсем уверен.Попробуйте это:

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

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