Как сделать серверное приложение с PHP - PullRequest
4 голосов
/ 17 мая 2010

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

Я знаю, что могу прослушивать порт с помощью PHP socket_listen(). Родительский процесс принимает соединение, затем pcntl_fork() процесс, чтобы иметь детей для обработки соединения.

Но, насколько мне известно, ресурсы PHP не сохраняются при использовании fork (). Интересно, возможно ли это сделать с помощью PHP, или я должен сделать это в C?

Ответы [ 2 ]

1 голос
/ 17 мая 2010

1) Зачем заморачиваться? Запустите ваш демон как отдельный процесс и используйте socket_select () (или stream_select) для прослушивания запросов.

См. Код Алексея Заппарова здесь для получения готового решения.

2) Зачем мучаться с болью написания собственного кода сокета - используйте [x] inetd для управления серверами и выполняйте все коммуникации на stdio (обратите внимание, что в отличие от решения 1, для каждого клиента будет отдельный процесс - поэтому код обработки быть неблокирующим)

- Вы правы, говоря, что ресурсы PHP не должны быть доступны в раздвоенном процессе - но не указывайте, как это связано с вашей текущей проблемой. Это просто для того, чтобы вы могли посчитать количество соединений? Или что-то другое? В первом случае это намного проще. Используя решение 1, просто увеличивайте и уменьшайте переменную счетчика, когда клиенты подключаются / отключаются. В случае 2 - тот же подход, но сохраняйте переменную в файле данных / базе данных (вы также можете хранить информацию о соединениях и проводить периодические проверки). В качестве альтернативы ограничьте соединения на брандмауэре.

С

0 голосов
/ 17 мая 2010

Может быть, вы могли бы попробовать поделиться им с помощью memcache (http://www.php.net/manual/en/book.memcache.php). (я никогда не пробовал это, возможно, это работает)

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