empr
@empr

Как наладить «общение» между PHP-скриптом и C#-программой в Windows?

Задача экзотическая, конечно, но всё же. Есть PHP-скрипт (PHP7), который работает в Windows 7 в мультипоточном режиме (и постоянно в памяти висит). Есть C# утилита. Необходимо их связать между собой с высокой скоростью передачи данных между ними. Как это лучше сделать? Через сокеты? Через расширение к PHP DOTNET? (если да - какие инструменты .NET-фреймворка использовать?)

Переписывать всё не предлагайте - это, конечно, стоило бы сделать по-хорошему, но тут слишком малозначительная задача, чтобы тратить на неё много времени.

Спасибо!
  • Вопрос задан
  • 1089 просмотров
Пригласить эксперта
Ответы на вопрос 5
@Beltoev
Живу в своё удовольствие
Вариант с сокетами вам уже предложили, но добавлю еще один способ:

Для быстрого обмена данными между процессами обычно используют разделяемую память.

То есть, PHP скрипт создает участок памяти (shmop_open) и пишет туда данные расчётов, а уже с помощью C#-утилиты считываете данные из этого участка и манипулируете ими.

Ну, а для оповещения утилиты о том, что данные можно забирать, можно использовать мьютекс. То есть, снова же, PHP при запуске создает мьютекс и занимает его, а утилита - также пытается его занять и "спит" в очереди. Как только данные можно будет обрабатывать - PHP освободит мьютекс, дав утилите команду "Фас!"

С PHP на Windows не игрался, но, думаю, что проблем не возникнет как с разделяемой памятью, так и с созданием мьютекса (распараллелить PHP ведь смогли уже =) ).
Ответ написан
@VZVZ
Reverse-Engineer, Software Developer, Architect
Через exec и stdout/stdin (правда, не знаю, возможно ли последнее со стороны PHP).
Ответ написан
@r_zaycev
Если не хочется изобретать велосипед, то можете попробовать Apache Thrift. На Хабре есть небольшая статья на эту тему (касательно C#).
Ответ написан
Комментировать
GavriKos
@GavriKos
Если с высокой скоростью - смотрите в сторону сокетного соединения
Ответ написан
profesor08
@profesor08 Куратор тега PHP
В зависимости от того, что вам конкретно нужно, то и делайте. "Наладить общение" - слишком абстрактное понятие, вдруг вы хотите просто пингануть процесс по порту.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы