【发布时间】:2012-01-08 03:07:05
【问题描述】:
我正在使用 Mercurial 基于其他存储库创建存储库(即将它们合并在一起)。这是通过在服务器上使用 PHP 的一个漂亮的小 Web 界面完成的。
不幸的是,对于某些任务来说,这非常慢(难怪,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 进程开始使用一个服务器的 socket/pipe/whatever 时会发生什么?
【问题讨论】:
标签: php mercurial process pipe