Проблема межъязыкового развития - PullRequest
0 голосов
/ 05 декабря 2009

Я работаю над проектом, который включает базу данных (My SQL), веб-сайт (PHP) и пользовательское высокопроизводительное серверное приложение (C ++). Приложение C ++ (и сопровождающее его клиентское приложение) составляют основную часть проекта, а база данных хранит долгосрочные данные для него. Сайт предназначен в основном для отображения различной статистики и администрирования.

1) Я хочу, чтобы скрипты PHP и приложение c ++ могли каким-либо образом обмениваться данными, поскольку база данных используется только для постоянных данных, и, кроме того, приложение c ++ может кэшировать некоторые вещи, поэтому необходимо сообщить об этом для перезагрузки данных. в некоторых случаях. Весьма вероятно, что они будут на разных машинах и даже, возможно, на разных ОС. Я обдумывал идею, что TCP может быть лучшим вариантом с каким-то простым протоколом команды-ответа?

2) Как лучше всего один раз написать общий код интерфейса базы данных и использовать его как на веб-сайте PHP, так и в приложениях c ++?

Ответы [ 8 ]

3 голосов
/ 05 декабря 2009

1) Используйте базу данных для общения. Приложение C ++ может

select * from table where some_last_modified_timestamp > '<last time checked>';

2) Используйте хранимые процедуры вместо жестко закодированных запросов как в PHP, так и в C ++.

1 голос
/ 05 декабря 2009

Используйте Thrift или Protobufs (возможно, Avro ), чтобы объявить протокол связи и использовать его через сокет tcp. Это решит ваши межъязыковые проблемы без необходимости настраивать собственный протокол, и вы получите реальные объекты с обеих сторон (статически типизированные для c ++!). Я видел, как Thrift использовался очень успешно.

1 голос
/ 05 декабря 2009

Лучший способ использовать один и тот же SQL в PHP и C ++ - подготовленные операторы.

Хороший способ связи - один для размещения сервера (custom / soap / rest), к которому подключается другой. PHP может легко размещать и подключаться, и, поскольку этот код написан на C, он должен быть легким и на C ++.

Написание PHP-расширения, как предполагает Эрик Сеппанен, выходит за рамки возможностей и потребностей вашего проекта.

1 голос
/ 05 декабря 2009

1) Я бы также предложил TCP. В зависимости от сложности запроса-ответа, я бы, вероятно, выбрал какой-нибудь специальный текстовый протокол или использовал XML (особенно подходит, если ответы или запросы структурированы и более сложны). Если вы используете XML, вам не нужно писать собственные парсеры / генераторы. Вы даже можете попробовать использовать XML-RPC, но у меня пока нет практического опыта.

1 голос
/ 05 декабря 2009

Вы можете попробовать вообще не разрешать PHP доступ к базе данных. Сделайте так, чтобы приложение C ++ выполняло всю работу с базой данных и передавало данные на сайт PHP. Вы можете запустить часть приложения C ++ в качестве сервера для PHP, чтобы получать из него отчеты и т. Д.

1 голос
/ 05 декабря 2009

# 1: Если вы работаете в разных ОС, то TCP звучит как неплохая идея.

# 2: звучит так, будто вам нужна библиотека C, а затем вызывайте ее как из C ++ (тривиально), так и из PHP. Поиск в Google возвращает множество статей о написании расширений PHP на C, например:

http://devzone.zend.com/article/1021

http://www.devarticles.com/c/a/Cplusplus/Developing-Custom-PHP-Extensions-Part-1/

0 голосов
/ 05 декабря 2009

Я здесь новичок, поэтому извините, если моя идея ужасно плоха.

Но почему мы не можем просто передать XML по TCP. У вас есть C ++ TCP-сервер и PHP TCP-клиент. Я думаю, что PHP имеет довольно мощный API сокетов

0 голосов
/ 05 декабря 2009

Мой подход заключается в использовании SWIG. Я использую его с python, но он также поддерживает PHP.

Тогда его очень легко использовать из вашего скрипта.

Другими решениями могут быть некоторые RPC (которые позволят разместить сервер и приложение PHP в разных местах).

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