Linux Daemon на C ++ для обработки PHP-запросов - PullRequest
2 голосов
/ 15 ноября 2011

ОС: Linux (RedHat) Язык программирования: C ++

Мне нужно создать демон (процесс) для Linux с использованием C ++, который будет непрерывно прослушивать пользовательский порт для запросов PHP. PHP отправит данные запроса в форме XML демону, демон проанализирует XML с помощью Xerces и отправит соответствующий ответ в форме XML на страницу PHP.

Я успешно создал процесс демона, прослушивающий порт 4646 на локальном хосте, но я не могу понять, как запрос от PHP будет передаваться демону и как демон отправит ответ обратно.

Я пытался использовать Google для этой конкретной проблемы, но никак не мог найти решение. Буду очень признателен за любую помощь по этой проблеме.

Я также немного читал о демонах PHP, но я не уверен, применимы ли они в этом конкретном сценарии.

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

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Вопрос довольно запутанный.

Мне нужно создать демон (процесс) для Linux с использованием C / C ++

Почему он должен быть написан на Cили C ++?

Я также немного читал о PHP-демонах, но я не уверен, применимы ли они

Означает ли это, что не нужнобыть написано в C / ++?Как вы думаете, почему они могут быть неприменимы?

демон будет анализировать XML с помощью Xerces

Почему он должен использовать Xerces?Предположительно, демон должен делать что-то большее, чем просто анализ XML и составление ответа - что еще он делает?

Написание демона не является тривиальным процессом.Написание сервера сокетов не является тривиальным процессом.Это несколько упрощается за счет реализации четко определенного протокола на каждом конце.

... который, скорее, задает вопрос, почему бы просто не использовать HTTP в качестве протокола и веб-сервера для реализации серверных компонентов и отделить приложение-специфическая логика в [f] CGI-программе.И сделав еще один шаг вперед, почему бы не реализовать логику для конкретного приложения с помощью PHP.

Единственное, что сложно и быстро - это результаты, то есть успешное взаимодействие между страницами PHP и демоном

Некоторые параметры:

  1. Написать специфическую часть приложения как страницу PHP, а затем вызвать ее через HTTP-запрос, используя curl

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

  3. Записатьразветвление серверный демон в PHP, обрабатывающий соединение на обоих концах как сетевой сокет (требует, чтобы вы определили свой протокол)

  4. запись однопоточного серверного демона ( с использованием socket_select ) в PHP, обрабатывающем соединение на обоих концах как сетевой сокет (требуется определить свой протокол)

Конечно, в любом случаездесь я упомянул PHP выше, вы также можете использовать C, C ++, Perl, Java .... и т. д.

1 голос
/ 15 ноября 2011

Лучше использовать библиотеку сокетов php для соединения с демоном, работающим в вашей системе, а затем передавать данные демону и обрабатывать результаты, отправленные демоном.

Вы можетеобратитесь к PHP Socket Library для создания кода для подключения к сокету с демоном ...

Я думаю, что это лучший вариант, чем использование CURL, так как демон также является настраиваемым интерфейсом сокетов, CURLбудет наиболее подходящим для запросов HTTP, но я думаю, что здесь демон не HTTP ..

0 голосов
/ 15 ноября 2011

xinetd / inetd может быть немного старым, но может сделать это легко и масштабируемо (с ограничениями)

Inetd вызовет вашу программу и отправит трафик на стандартный ввод, и ваш стандартный вывод перейдет к соединению. Пока вам не нужна общая информация, вам больше не нужно беспокоиться о том, что программа не будет иметь ошибок / нет утечек памяти и т. Д. ...

Simon Loader

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