Я новичок в программировании сокетов. Я пишу приложение на клиентской машине, чтобы иногда запрашивать некоторые данные или отправлять некоторые данные. Этот обмен будет происходить периодически, а в лучшем случае - часто, один или два раза в месяц. Из исследований, которые я проводил в программировании сокетов, мне нужен сценарий, выполнение которого никогда не заканчивается. Инстинктивно я думаю, что это излишне потребляет ресурсы для такого нечастого использования, но в PHP нет механизма прерываний. Идеальный сценарий должен сидеть и ничего не делать, и только тогда, когда происходит связь через порт, сценарий просыпается и выполняется. На других языках это можно сделать через прерывание.

Может ли кто-нибудь предложить подход, который я мог бы использовать для решения этой проблемы, пожалуйста?

Спасибо, Джон

php
0
user505988 26 Авг 2011 в 02:37

3 ответа

Лучший ответ

Вы можете попробовать комбинированный подход. Напишите сценарий PHP так, чтобы он опрашивал / ждал в течение ограниченного времени и использовал планировщик для запуска в определенное время, скажем, каждые 15 минут. Я написал очень простую программу для подключения к медицинскому устройству. Чтобы сидеть и ждать, не требуется много ресурсов, но если вы обеспокоены, вы можете ограничиться описанной выше техникой.

0
user424678 25 Авг 2011 в 22:47

Вы можете использовать socket_select с null четвертый параметр, чтобы перевести ваш скрипт в спящий режим на неопределенный срок и заставить его просыпаться, когда в сокете есть данные для чтения.

Другой, менее эффективный способ - опрос, сон n минут, повторный опрос и т. Д.

1
Matthew 25 Авг 2011 в 22:54

Джон,

В своем вопросе вы упоминаете, что эта возможная транзакция будет происходить не чаще одного или двух раз в месяц. Рассматривали ли вы использование cron (или его эквивалента в Windows) на стороне клиента? Может, запускать его раз в час для проверки?

Поскольку данные настолько редки, они очень сильно зависят от времени?

0
Ed Heal 25 Авг 2011 в 23:06