Проблема разработки IPC сервера - PullRequest
0 голосов
/ 16 августа 2010

У меня проблема с дизайном, связанная с отправкой пользовательских данных из приложения для мобильного телефона на сервер (Debian 5 LAMP). Мне нужно отправить различные данные, такие как имя пользователя, дата рождения, номер заказа клиента. и т. д. Они будут переданы приложению с кодом C (всегда в процессе), работающему на сервере.

В настоящее время я использую именованные каналы для IPC между моим внешним мобильным приложением и процессом сервера кода C. У меня есть проблема с разрешениями для этого метода связи, но вместо того, чтобы просто попытаться решить эту проблему, мне было интересно, есть ли у меня правильный подход в первую очередь!

Во-первых, мне было интересно с точки зрения дизайна и безопасности, является ли это приемлемым методом IPC в этом случае, или СЛЕДУЕТ ли мне записывать данные в базу данных, а затем запускать задание cron, которое считывает новые записи из базы данных, а затем отправляет их на серверный процесс.

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

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

Не имея большого опыта на стороне сервера, мне просто было интересно, есть ли какие-либо стандартные решения для этой проблемы.

В настоящее время я использую следующий php-код (вызывается из apache) для связи с процессом сервера

$pipe="/tmp/pipe";
$mode=0600;
if(file_exists($pipe))
{

   $f = fopen($pipe,"w");
   $result = fwrite($f,"some string");
   echo $result;  
}

Ответы [ 2 ]

0 голосов
/ 16 августа 2010

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

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

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

Мое предложение будет записывать файлы в каталог «спул», но обязательно пишите их под временным именем и переименовывайте их по окончании (переименование является атомарным, запись файлов - нет).

Демон должен проверить файлы в этом каталоге (с временным именем) и обработать их любым способом. При желании запишите результаты в другой каталог с помощью аналогичного механизма.

Убедитесь, что ваши системы мониторинга отслеживают количество файлов в этих каталогах и возраст самого старого, чтобы обнаружить ошибку.

0 голосов
/ 16 августа 2010

Я бы сказал, что ваш подход был неверным. Вы пытаетесь заставить ваше мобильное приложение (оно работает на мобильном устройстве, не так ли?) Взаимодействовать с процессом C-App на вашем сервере Debian через именованный канал IPC, который никогда не работает! IPC означает межпроцессное взаимодействие и касается обмена данными между двумя процессами на одной машине. Именованный канал является одним из способов реализации IPC и, следовательно, работает только на той же машине Linux.

Итак, используйте другой подход. Из того, что я прочитал, вы должны использовать архитектуру клиент / сервер, в которой ваш сервер (приложение с кодом C) позволяет нескольким клиентам (мобильное приложение) подключать и отправлять данные одновременно. Сервер решает, будет ли он сбрасывать входящие данные в базу данных или кэшировать эти данные в памяти ... Этот способ связи не пассивен, поэтому вам не нужно запускать внешний cronjob для обновления базы данных. Вы можете использовать модуль внутреннего планирования для регулярного обновления базы данных.

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