Совместное использование командного сервера Mercurial несколькими процессами - PullRequest
2 голосов
/ 08 января 2012

Я использую Mercurial для создания репозиториев на основе других репозиториев (т. Е. Их объединения). Это делается с помощью небольшого веб-интерфейса с использованием PHP на сервере.

К сожалению, для некоторых задач это очень медленно (неудивительно, что PHP в настоящее время должен выполнять exec () hg примерно 40 раз за запрос). Поэтому я подумал об использовании командного сервера, доступного в Mercurial 1.9 +.

Что касается документации, я могу запустить простой hg serve и позволить ему работать с несколькими репозиториями (давая каждой команде опцию -R). Это замечательно. Но могу ли я также разделить командный сервер между несколькими (и, возможно, одновременными) запросами?

Я делаю что-то вроде этого, чтобы запустить сервер из моего скрипта PHP:

$cmd         = 'hg serve --cmdserver pipe';
$pipes       = null;
$descriptors = array(
   STDIN  => array('pipe', 'r'),
   STDOUT => array('pipe', 'w')
);

$process = proc_open($cmd, $descriptors, $pipes);

if (!is_resource($process)) {
    throw new Exception('Could not start command server.');
}

Но это делает сервер доступным только для текущего процесса PHP. Так как я не знаком с использованием каналов и прочего, я теперь задаюсь вопросом: возможно ли запустить сервер один раз (вне PHP) и «подключиться» к нему? Как открытие сокета и чтение / запись в него.

И если это возможно: это мудро? Что происходит, когда несколько процессов PHP начинают использовать сокет / канал одного сервера / что угодно?

1 Ответ

1 голос
/ 08 января 2012

Сервер команд блокирует и будет одновременно обслуживать только один запрос.В настоящее время (начиная с Mercurial 2.0) нет способа подключиться к серверу через сокет, как вы предлагаете, хотя было бы интересно иметь эту функцию.

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

Если вы заинтересованы в общении с командным сервером изнесколько (одновременных) клиентов, тогда я предлагаю вам начать обсуждение этого вопроса в Mercurial mailing list .

...