Простой, надежный IPC между Python и PHP - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть программа на python, которая запускает скрипт PHP с использованием функции subprocess.Popen(). Скрипт PHP должен взаимодействовать с Python, и я пытаюсь найти простой, но надежный способ управления отправкой / получением сообщений.

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

Существуют ли какие-либо универсальные библиотеки или платформы IPC, которые проще, чем необработанные сокеты?

  • ATM Мне нужно что-то, что поддерживает Python и PHP, но в будущем я могу захотеть использовать также C, Perl и Ruby.
  • Я ищу что-то надежное , т. Е. Когда происходит сбой сервера или клиента, другая сторона должна иметь возможность корректного восстановления.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Звучит так, будто вам нужна универсальная среда RPC.

Вы должны взглянуть на:

Экономия, вероятно, больше, чем вы ищете. Он используется Facebook для внутреннего использования.

0 голосов
/ 15 сентября 2009

Вы можете посмотреть на общую память или именованные каналы, но я думаю, что есть два более вероятных варианта, если предположить, что по крайней мере один из этих языков используется для веб-приложения:

A. Используйте атомарность вашей базы данных. В python начните транзакцию, поместите сообщение в таблицу и завершите транзакцию. С php начните транзакцию, извлеките сообщение из таблицы или пометьте его как «прочитанное» и завершите транзакцию. Сделайте свой PHP и / или Python достаточно осведомленным, чтобы не публиковать одни и те же сообщения дважды. Вуаля; надежный (и масштабируемый) IPC с использованием существующей веб-архитектуры.

B. Сделайте ваш веб-сервер (предположительно, веб-приложением) способным запускать как php, так и python, блокируя любые внутренние процессы только для локального доступа, а затем вызывайте их, используя xmlrpc или soap из вашего другого языка, используя стандартные библиотеки. Это также масштабируемо, поскольку вы можете изменить свои URL-адреса и блокировки безопасности позже.

...