Проблема межъязыкового развития

0

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

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

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

Теги:
code-reuse

8 ответов

1
Лучший ответ

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

  • 0
    Есть ли разумный способ представить интерфейс C ++ для PHP тогда? Или мне нужно будет создать для этого полнофункциональный протокол TCP?
  • 1
    Вы можете использовать что-то гораздо более простое, например JSON, построив его поверх существующего протокола (в данном случае HTTP).
3

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

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

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

  • 2
    Да, не думайте об этом, используйте БД в качестве IPC.
1

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

1

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

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

Написание PHP-расширения, такого как Eric Seppanen, предлагает путь, выходящий за рамки и потребность в вашем идентификаторе проекта.

1

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

1

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

# 2: Похоже, вам нужна библиотека 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

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

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

  • 0
    В оригинальном плакате не было никаких подробностей о связи, например, что инициирует связь, насколько сложна связь, или может ли PHP подключиться к серверу C ++ или наоборот.
  • 0
    Я думаю, что неправильно истолковал, но оригинальный плакат рассматривал возможность использования TCP.
0

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

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

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

  • 0
    Я использовал swig для написания расширений Python, но собирается ли swig решить тот факт, что сервер c ++ расположен на другом сервере, потенциальная возможность на другой ОС, отличной от PHP?
  • 0
    Прямо нет. Однако большинство языков предлагают простой обмен данными по сети, без необходимости знать, как сериализовать ваши данные. И поэтому весь процесс становится проще. Тем не менее, иметь php на обеих машинах не очень элегантное решение;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню