Как отправить запрос с сервера (PHP) в приложение на компе клиента (C#)

В общем, суть такая: Мне нужно посылать запрос из PHP скрипта на сервере в приложение, которое будет установлено на компе.

Делаю я это потому что мне из веб-сервиса нужно отсылать запрос на оборудование, которое будет подключено к компу, и имеет свои дрова.

Я придумал одно решение, и пока не понял насколько оно костыльное, но все же: при запуске приложения оно запускает локальный сервер (127.0.0.1:8005), и принимает в себя данные по сокету. При обращении к этому локальному серверу из адресной строки браузера коннекшн есть: приложение возвращает мне ответ. Но я не предусмотрел того, что запросы на 127.0.0.1:8005 с сервера будут обращаться не к локальному серверу компа, а к самому себе.

Был также вариант с использованием:

header('Location: http://127.0.0.1:8005');

... но это показалось мне костыльным.

Примерно такая ситуация. Если это костыльный треш - пишите. Если есть предположения как это можно реализовать - пишите.


Ответы (1 шт):

Автор решения: Blackmeser

Не столь трешовое, но теоретически рабочее решение:

Вам нужна архитектура с сервером, отвечающим за команды и состояния оборудования, у вашего PHP должна быть вёбморда, чтобы тыкать на кнопки управления оборудованием, с состоянием (выполнено или нет), а так-же отменой команд (таймауты), у PHP должен быть некий "контроллер состояний" в ОЗУ или БД, который будет запрашивать приложение на C# для управления оборудованием, а так-же нужна сама программа на C#, которая обращается к PHP, извлекает список команд, и выполняет их у себя, управляя оборудованием, и возвращая ответ к PHP о статусе: успешно или не успешно.

Во-первых: PHP тут не очень подходит (ИМХО), но кажется в нём есть статические поля, которые помогут в реализации данной идеи.
Во-вторых: это всё-равно довольно сложно, т.к. нужно продумывать много моментов, с синхронизацией, недоступностью устройств, формате сообщений/команд. В-третьих: самое сложное это "контроллер состояний", если сможете реализовать его у себя на PHP - всё остальное будет лучше. Но ту уже вам не помогут, т.к. данных вы не предоставили, что за устройства, какие команды, если же просто строка (а C# сам разберётся), то вам нужно контролировать какому устройству от кого, когда, и какая команда. Так-же приложение C# должно само сообщать о статусе устройств на PHP, периодично по таймеру.

Сделайте для начала:

  1. Вёбморду с 1 индикатором и 2мя кнопками (вкл/выкл)
  2. PHP, который хранит состояние устройства для индикатора и держит список команд, ожидая запросы от морды и приложения (функции: выдать вёбморду с индикатором и списком команд в очереди, принять нажатие из морды и добавить команду от морды в список команд, выдать список команд приложению C# по запросу, очистить список команд)
  3. C# приложение (форма с индикатором) которое не управляет никаким устройством и просто так-же хранит у себя это состояние и периодически запрашивает команды, и на основе команды меняет состояние индикатора на форме

Это просто минимальное возможное решение, хотите проще? Тогда исключайте PHP, но сильно проще не станет.

→ Ссылка